Android4開發入門經典 之 第十一部分:網路程式設計【私塾線上原創】
基於Socket的網路程式設計
Android的網路程式設計部分,基本上和Java的網路程式設計是一樣的,基本上也分成兩種,一種是基於Socket的,另外一種是基於Http協議的。
基於Socket的基本用法,跟Java裡面的用法一樣,簡單回顧一下:
一:服務端
1:啟動一個伺服器端的socket:ServerSocket server = new ServerSocket(1234);
2:開始偵聽請求:Socket client = server.accept();
3:取得輸入和輸出流:
4:然後就可以通過流來進行網路傳輸了
5:最好要記得關閉流和Server
java程式碼:
ServerSocket server=new ServerSocket(1234); Socket client=server.accept(); InputStream in = client.getInputStream(); OutputStream ut=client.getOutputStream(); byte bs[] = new byte[1024]; in.read(bs); String str= new String(bs); System.out.println(str); out.write("Server send".getBytes()); out.flush(); client.close();
二:客戶端:
1:發起一個socket連線:Socket server = new Socket("192.168.1.2",1234);
2:取得輸入和輸出流:
3:然後就可以通過流來進行網路傳輸了
4:最好要記得關閉流和Socket
java程式碼:
String str = "client send"; out.write(str.getBytes()); out.flush(); byte bs[] = new byte[1024]; in.read(bs); System.out.println(new String(bs)); server.close();
當然這樣實現很不好,應該包裝成上層的流或者Reader、Writer來做。
包裝成Reader和Writer的服務端示例:
java程式碼:
ServerSocket server=new ServerSocket(1234); Socket client=server.accept(); BufferedReader in= new BufferedReader(new InputStreamReader(client.getInputStream())); PrintWriter ut=new PrintWriter(client.getOutputStream()); String str=in.readLine(); System.out.println(str); out.println("Server send"); out.flush();
包裝成Reader和Writer的客戶端示例:
java程式碼:
Socket server = new Socket("192.168.0.100", 1234); BufferedReader in = new BufferedReader(new InputStreamReader( server.getInputStream())); PrintWriter ut = new PrintWriter(server.getOutputStream()); String str = "client send"; out.println(str); out.flush(); System.out.println(in.readLine()); server.close();
使用HttpURLConnection
基於Http協議的基本用法,可以使用HttpURLConnection,也可以使用Apache的Http操作包,具體的使用方式下面分別來示例。
要讓應用使用網路,需要在Manifest檔案中新增許可權:
java程式碼:
HttpURLConnection預設使用get的方式與後臺互動 HttpURLConnection conn = null; try { URL u = new URL("http://192.168.0.100:8080/test.jsp?uuid=123"); conn = (HttpURLConnection)u.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = ""; while((line=br.readLine())!=null){ Log.i("NetTest","lien="+line); } } catch (Exception e) {e.printStackTrace();} finally{ conn.disconnect();}
請注意一點,在Android3.0以上的版本里面,已經不允許直接在Activity裡面進行網路的處理了,建議使用後臺執行緒或者是乾脆新建一個執行緒來執行,比如:
java程式碼:
Thread t =new Thread(new Runnable() { public void run() { //上面的程式碼 } }); t.start();
HttpURLConnection使用Post的方式與後臺互動,下載資料部分跟上一個示例是一樣的,麻煩在於上傳資料到伺服器,需要進行設定和處理,如下:
java程式碼:
URL u = new URL("http://192.168.0.100:8080/test.jsp"); conn = (HttpURLConnection)u.openConnection(); //因為這個是post請求,下面兩個需要設定為true conn.setDoOutput(true); conn.setDoInput(true);
java程式碼:
// 設定以POST方式 conn.setRequestMethod("POST"); // Post 請求不能使用快取 conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); // 配置本次連線的Content-type,配置為application/x-www-form-urlencoded的 conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); //DataOutputStream流 DataOutputStream ut = new DataOutputStream(conn.getOutputStream()); //要上傳的引數 String content = "uuid=" + URLEncoder.encode("post測試", "utf-8"); //將要上傳的內容寫入流中 out.writeBytes(content); //重新整理、關閉 out.flush(); out.close();
使用Apache的Http操作包來實現以Get的方式與後臺互動,示例如下:
java程式碼:
//封裝用於請求的 方法 物件 HttpGet get = new HttpGet("http://192.168.0.100:8080/test.jsp?uuid=uuid121&name=name222"); //建立一個Http的客戶端物件 HttpClient client = new DefaultHttpClient(); try{ //傳送請求,並獲得返回物件 HttpResponse response = client.execute(get); //從response物件裡面把返回值取出來 HttpEntity entity = response.getEntity(); //得到返回內容的流,接下來就是流式操作了 InputStream in = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuffer buffer = new StringBuffer(); String tempStr = ""; while((tempStr=reader.readLine())!=null){ buffer.append(tempStr); } in.close();//應該寫finally裡面去 reader.close();//應該寫finally裡面去 Log.i("javass",buffer.toString()); }catch(Exception err){err.printStackTrace();}
使用Apache的Http操作包來實現以Post的方式與後臺互動,示例如下:
java程式碼:
//封裝用於請求的 方法 物件 HttpPost post = new HttpPost("http://192.168.0.100:8080/test.jsp"); //為post組織引數 NameValuePair uuid = new BasicNameValuePair("uuid","postUuid"); NameValuePair name = new BasicNameValuePair("name","postname"); Listlist = new ArrayList (); list.add(uuid); list.add(name); //把這些引數封裝到HttpEntity中 HttpEntity reqEntity = null; reqEntity = new UrlEncodedFormEntity(list); //然後把HttpEntity設定到post物件裡面去 post.setEntity(reqEntity); //建立一個Http的客戶端物件 HttpClient client = new DefaultHttpClient(); //傳送請求,並獲得返回物件 HttpResponse response = client.execute(post);
後面獲取response的Entity等的處理,跟get方式是完全一樣的,這裡就不去贅述了。
操作JSON
在實際應用開發中,網路間傳輸的資料經常是JSON格式的,除非十分有必要,不會去使用XML。因此必須要掌握Android如何處理JSON資料,Android已經自帶了JSON的處理包“org.json”。下面就來看看如何解析已經獲取的資料,獲取資料的過程就是前面講的獲取的網路返回值。
返回單個物件的情況,示例如下:
java程式碼:
JSONObject j = new JSONObject(jsonData); String uuid = j.getString(“uuid");
返回物件陣列的情況,示例如下:
java程式碼:
JSONArray ja = new JSONArray(jsonData); for(int i=0;i
視訊配套PPT,視訊地址【 Android4開發入門經典獨家視訊課程】
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26715458/viewspace-717435/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android4開發入門經典 之 第十二部分:最佳實踐【私塾線上原創】Android
- Android4開發入門經典 之 第十部分:多媒體【私塾線上原創】Android
- Android4開發入門經典 之 第三部分:Activity【私塾線上原創】Android
- Android4開發入門經典 之 第五部分:Service【私塾線上原創】Android
- Android4開發入門經典 之 第八部分:SQLite【私塾線上原創】AndroidSQLite
- Android4開發入門經典 之 第六部分:Broadcast【私塾線上原創】AndroidAST
- Android4開發入門經典 之 第四部分:使用者介面【私塾線上原創】Android
- Android4開發入門經典 之 第九部分:Content Provider【私塾線上原創】AndroidIDE
- Android4開發入門經典 之 第七部分(1):資料儲存【私塾線上原創】Android
- Android4開發入門經典 之 第七部分(2):資料儲存【私塾線上原創】Android
- Android4開發入門經典 之 第二部分:Android應用的核心基礎【私塾線上原創】Android
- windows網路程式設計經典入門 (轉)Windows程式設計
- Android4開發入門經典 之 第四部分:使用者介面Android
- Python網路程式設計(基礎總結入門經典)Python程式設計
- (三)神經網路入門之隱藏層設計神經網路
- JavaScript函數語言程式設計入門經典JavaScript函數程式設計
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- C語言程式設計入門經典18個小程式C語言程式設計
- 嵌入式開發 ARM入門經典
- 神經網路程式設計入門【轉】神經網路程式設計
- 神經網路入門 第一部分神經網路
- Linux學習路線及網路程式設計經典書籍(轉載)Linux程式設計
- 遊戲開發新手入門之Windows程式設計(轉)遊戲開發Windows程式設計
- Python程式設計入門——基礎語法詳解(經典)Python程式設計
- C#網路程式設計經典程式碼C#程式設計
- 經典程式設計引言程式設計
- Webpack經典入門Web
- 網路訪問之開啟經典模式(指令碼)模式指令碼
- 神經網路入門神經網路
- (五)神經網路入門之構建多層網路神經網路
- 程式設計和網路程式設計入門程式設計
- C++入門經典第一章程式設計專案C++程式設計
- 好程式設計師Python學習路線之python爬蟲入門程式設計師Python爬蟲
- [轉]BI入門經典
- Kafka入門經典教程Kafka
- BI入門經典 (轉)
- 聊聊經典機器學習入門機器學習
- 程式設計師經典幽默之惡搞對聯程式設計師