-
doHttpClientGet() +注釋查看全部
-
doHttpClientPost()查看全部
-
doHttpClientGet()查看全部
-
字符轉(zhuǎn)碼,解決中文亂碼查看全部
-
servlet程序查看全部
-
doPost() 1查看全部
-
doGet() 放在run方法中查看全部
-
摘自評(píng)論區(qū): AS要使用這兩個(gè)過(guò)時(shí)包可以在Gradle(Module:app)中做如下嘗試: 首先在android{}里添加如下內(nèi)容: android { useLibrary 'org.apache.http.legacy' packagingOptions{ exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' } } 然后在dependencies{}中添加這兩個(gè)包: dependencies { compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.4' compile group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.4' }查看全部
-
通過(guò) HttpClient 上傳文件的實(shí)現(xiàn)步驟 1. 導(dǎo)入jar包:將 httpcore-4.4-beta1.jar 和 httpmime-4.4-beta1.jar 拷貝到項(xiàng)目的 libs 目錄下。 給項(xiàng)目配置 Java Build Path,在libraries 一欄選擇“Add JAEs”--> 選擇項(xiàng)目的libs目錄下的jar包(就是剛才那兩個(gè)),點(diǎn)擊OK --> 點(diǎn)擊OK,就可以了。 2. 將上節(jié)課的 UploadThread 的 run()方法內(nèi)部代碼剪切到新建的方法: private void httpUpload(){}里面。目的是要與新的方法做一下對(duì)比。 3. 再定義一個(gè)方法,通過(guò)HttpClient上傳文件。如圖,是 uploadHttpClient() 的編寫(xiě) 4. 在原來(lái)的run()中,只調(diào)用 uploadHttpClient()。 通過(guò)對(duì)比,可以很明顯的發(fā)現(xiàn),通過(guò) HttpClient 實(shí)現(xiàn)文件上傳要比之前的方法(現(xiàn)在寫(xiě)在httpUpload()里面)要簡(jiǎn)單。無(wú)需自己去封裝請(qǐng)求協(xié)議(封裝http協(xié)議很容易出錯(cuò),必須嚴(yán)格按照格式編寫(xiě))。所以,用 HttpClient 開(kāi)發(fā)是比較快捷方便的,代碼量也比較少,主要是創(chuàng)建 MultipartEntity 和 FileBody 對(duì)象,將 FileBody 添加到 MultipartEntity中。查看全部
-
使用瀏覽器(本例是IE瀏覽器)的開(kāi)發(fā)者選項(xiàng)查看在上傳文件的過(guò)程中,請(qǐng)求正文的格式是怎么樣的。 然后嚴(yán)格按照這中格式去拼裝請(qǐng)求的實(shí)體數(shù)據(jù),尤其是在本例中,末尾的邊界比開(kāi)頭的邊界要多出一個(gè)“--”的前綴和后綴,很容易被遺漏(一旦遺落,服務(wù)器是無(wú)法識(shí)別的)。另外也必須注意到換行,前面是換一行,后面是換兩行。這些細(xì)節(jié)都不允許有誤。 在Content-Description當(dāng)中,需要使用轉(zhuǎn)義字符“\”去轉(zhuǎn)義引號(hào)。 相關(guān)代碼(數(shù)據(jù)的拼裝)如下: String boundary="---------------------------7de2c25201d48"; String prefix="--"; // 定義前綴(后綴) String end="/r/n"; conn.setRequestProperty("Content-Type","multipart/form-data;boundary"+boundary); // 通過(guò) multipart 協(xié)議向服務(wù)器發(fā)送數(shù)據(jù) // 創(chuàng)建輸出流對(duì)象 DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(prefix+boundary+end); out.writeBytes("Content-Description:form-data;name=\"file\";filename=\""+"Sky.jpg"+"\""+end); out.writeBytes(end); 。。。接下來(lái)的部分就是實(shí)體數(shù)據(jù)。查看全部
-
Servlet的編寫(xiě)(文件上傳) 注意這里的文件類型為“Part”。 part.write(); 指定文件保存的名稱。查看全部
-
服務(wù)器首頁(yè)的編寫(xiě)查看全部
-
模仿迅雷多線程下載 1. Http協(xié)議字段 Range "bytes=" + start + "-" + end,向服務(wù)器請(qǐng)求指定長(zhǎng)度的流信息。 2. RandomAccessFile 設(shè)置寫(xiě)入的位置 3. 開(kāi)啟線程發(fā)送網(wǎng)絡(luò)請(qǐng)求查看全部
-
在手機(jī)端解析服務(wù)器的xml文件,run()方法的部分編寫(xiě): XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(in,"utf-8"); //解析輸入流 /* 小知識(shí):pull解析是基于事件驅(qū)動(dòng) */ int eventType = parser.getEventType(); //獲取事件類型 final List<Girl> list = new ArrayList<Girl>(); Girl girl = null; //根據(jù)事件類型進(jìn)行處理 while (eventType != XmlPullParser.END_DOCUMENT){ //END_DOCUMENT 文檔的結(jié)束位置 String data = parser.getName(); //獲取xml文件中的標(biāo)簽名 switch (eventType){ // 根據(jù)事件類型進(jìn)行處理 case XmlPullParser.START_TAG: if ("girl".equals(data)){ //如果起始標(biāo)簽是“girl”,則創(chuàng)建Girl對(duì)象 girl = new Girl(); } if ("name".equals(data)){ //如果起始標(biāo)簽是“name”,則給girl賦值 girl.setName(parser.nextText()); //parser.nextText取出當(dāng)前標(biāo)簽對(duì)應(yīng)的值 } if ("age".equals(data)){ girl.setAge(Integer.parseInt(parser.nextText())); } 。。。依此類推 case XmlPullParser.END_TAG: if ("girl".equals(data) && girl!=null){ list.add(girl); } break; } eventType = parser.next(); //開(kāi)始下一次循環(huán) } 然后通過(guò) handler 向主線程發(fā)送消息,更新UI。查看全部
-
Json是一種輕量級(jí)的數(shù)據(jù)交換格式,它是基于JavaScript的一個(gè)子集。 Json的格式:一個(gè)花括號(hào),里面指定一個(gè)名和一個(gè)值就可以了,例如: {"name":"Lucy"} 實(shí)際上的格式是非常多樣、非常靈活的。 --------------- 如圖是添加 json 信息的部分代碼查看全部
舉報(bào)
0/150
提交
取消