標籤:
轉自:http://www.cnblogs.com/peiandsky/p/4376718.html
Android程式最重要的模組就是網路部分,如何從網路上下載資料,如何將處理過的資料上傳至網路,往往是android程式的關鍵環節。
Android原生提供基於HttpClient和HttpUrlConnection的兩種網路訪問方式。利用原生的這兩種方式編寫網路代碼,需要自己考慮很多,擷取資料或許可以,但是如果要將手機本機資料上傳至網路,根據不同的web端介面,需要組織不同的資料內容上傳,給手機端造成了很大的工作量。 目前有幾種快捷的網路開發開源架構,給我們提供了非常大的便利,他們應該是android網路處理部分開源架構的前三名。 1.https://github.com/loopj/android-async-http loopj這款開源架構一直是我鐘愛的網路架構,在我寫過的相當多的程式中,一直使用該架構,以至於對這個架構產生了厭倦的情緒。 太詳細的使用文檔,太簡單的使用方式,它就像是一門進階語言,定製好了所有的東西,你只需要拼湊一下就能夠處理,所以你想定製更加細節的操作,只有自己動手,反而造成了一些不必要的麻煩。 loopj在前一段時間對https的支援並不好,如果要支援https,則需要費點功夫。 1.4幾個版本的升級對前部分代碼的承接性不夠好,造成了我對這個架構的厭倦。 擷取一張圖片:
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://example.com/file.png", new FileAsyncHttpResponseHandler(/* Context */ this) {
@Override
public void onSuccess(int statusCode, Header[] headers, File response) {
// Do something with the file `response`
}
});
構造請求參數:
RequestParams params = new RequestParams();params.put("key", "value");params.put("more", "data");
loopj提供了各種關於返回參數的解析ResponseHandler,這也是我變得不喜歡loopj的一種原因。
2.https://github.com/kevinsawicki/http-request
對於Loopj來說,HttpRequest就是一種簡單粗暴,一個請求可以涵蓋在一句代碼當中,不給任何一點冗餘的成分。
String response = HttpRequest.get("http://google.com").body();
將資料列印到控制台,或者其他的流:
HttpRequest.get("http://google.com").receive(System.out);
忽略https的安全:
HttpRequest request = HttpRequest.get("https://google.com");
//Accept all certificates
request.trustAllCerts();
//Accept all hostnames
request.trustAllHosts();
對於小項目,這種網路架構簡直就是一種幸福的選擇。 3.https://github.com/square/okhttp 相比於loopj和HttpRequest,okhttp要更為強大,使用方式也稍顯複雜,但是卻是我目前最喜歡的感覺。 這是著名公司Square的開源架構,出手不凡。 下面貼出我項目中的代碼:
OkHttpClient client = new OkHttpClient(); client.networkInterceptors().add(new StethoInterceptor()); RequestBody body = new FormEncodingBuilder() .add("data", data).add("token", getToken(data)) .add("system", "sample").build(); Request request = new Request.Builder() .url("http://sample.com/api/v1") .post(body).build(); Response response = client.newCall(request).execute(); final String reslut = response.body().string();
在上述代碼中有這樣一行代碼:
client.networkInterceptors().add(new StethoInterceptor());
這是使用facebook的開源stetho來進行查看網路訪問情況的一個工具。
okhttp可以通過chrome的開發工具來查看手機的網路訪問情況,就和web開發人員一樣可以在瀏覽器中查看手機訪問網路的即時資訊,查看提交和返回結果,大大的方便了開發,這個工具的使用將會專門寫一篇部落格來進行講解。
Android最流行的網路架構