androidhttp非同步
1. Android 我的一個APP有時會出現HTTP請求失敗的情況,其他應用正常聯網,重啟後恢復正常
是不是沒有在非同步線程中請求數據
2. 安卓ion與android-async-http哪個框架更好用
android-async-http 開源框架可以使我們輕松地獲取網路數據或者向伺服器發送數據,最關鍵的是,它是非同步框架,在底層使用線程池處理並發請求,效率很高,使用又特別簡單。
以往我們在安卓上做項目,比如要下載很多圖片、網頁或者其他的資源,多數開發者會選擇一個線程一個下載任務這種模型,因為安卓自帶的 AndroidHttpClient 或者 java 帶的 java.net.URL ,默認都是阻塞式操作。這種模型效率不高,對並發要求高的 APP 來講,並不適用。有的人會選擇使用 nio 自己實現,代碼復雜度又很高。
AsyncHttpClient 作為 android-async-http 框架的一個核心應用類,使用簡單,可以處理文本、二進制等各種格式的 web 資源。下面提供一些代碼來看如何使用:
public class Downloader {
public static AsyncHttpClient mHttpc = new AsyncHttpClient();
public static String TAG = "Downloader";
public void downloadText(String uri){
mHttpc.get(uri, null, new AsyncHttpResponseHandler(){
@Override
public void onSuccess(String data){
Log.i(TAG, "downloaded, thread id " + Thread.currentThread().getId());
// TODO: do something on
}
@Override
public void onFailure(Throwable e, String data){
Log.i(TAG, "download failed.");
// TODO: error proceed
3. android OKhttp 非同步POST請求
可以採用okGo 開實現,
OkGo.<String>post(BASEURL + "/test/deviceInfo")
.upJson(jsonObject)
.execute(callback);
然後在
@Override
public void onSuccess(Response<String> response) {} 內進行處理
4. android中okhttp怎麼處理異常
下面是獲取到json字元串。 enqueue就是非同步請求的意思。
OkHttpClient mHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url)
.build();
mHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
//載入失敗
}
@Override
public void onResponse(Response response) throws IOException {
//成功獲取數據
if (response.isSuccessful()){
String json = response.body().toString();
Log.d("mainai", "onResponse() returned: " + json);
}
}
});
5. 如何對非同步請求進行優化 android
非同步載入的話,這個就是多線程編程了
一兩句話也說不清楚,建議你自己看教程吧
這是android多線程編程非常詳細的教程了http://luo.apkbus.com/
6. android httpurlconnection 是非同步請求么
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
在得到一個連接對象時,應該就已經向伺服器發送請求了
可參考:http://www.cnblogs.com/devinzhang/archive/2012/01/08/2316453.html
7. android http傳輸是在activity中還是在service中
可以在activity中也可以在service中,看你的請求是否當耗時,並且一直需要運行的,類似下載電影這種,肯定需要耗時很久,那就肯定需要放入service裡面去用;但如果只是請求頁面數據,可以再activity裡面啟用非同步任務或者線程處理,但是切忌不要講http請求放在UI線程處理。
8. 我想了解android http請求 同步與非同步的區別
給你舉一個例子,點擊按鈕執行HTTP請求然後跳轉下一頁。
同步:發送http請求→獲取返回結果→分析結果→跳轉下一頁
非同步:發送http請求→跳轉下一頁(不需要等待請求結果,對結果的處理在另一個線程中)
9. okhttp,retrofit,android-async-http,volley應該選擇哪一個
個人認為okhttp是android平台最好的網路庫。
volley是一個簡單的非同步http庫,僅此而已。缺點是不支持同步,這點會限制開發模式;不能post大數據,所以不適合用來上傳文件。
android-async-http,與volley一樣是非同步網路庫。但volley是封裝的httpUrlConnection,它是封裝的httpClient,而android平台不推薦用HttpClient了,所以這個庫已經不適合android平台了。
okhttp是高性能的http庫,支持同步、非同步,而且實現了spdy、http2、websocket協議,api很簡潔易用,和volley一樣實現了http協議的緩存。picasso就是利用okhttp的緩存機制實現其文件緩存,實現的很優雅,很正確,反例就是UIL(universal image loader),自己做的文件緩存,而且不遵守http緩存機制。
retrofit與picasso一樣都是在okhttp基礎之上做的封裝,項目中可以直接用了。
10. Android中可以同時請求多個HTTP請求嗎我
1)封裝HttpClient
2)由於用到線程池,可以進行多任務網路請求操作
3)沒有網路的時候進行網路狀態檢查
4)對請求的數據根據URL進行緩存到本地sqlite資料庫中(我剛剛想起了 post請求的時候需要對緩存url及本地數據存取做修改才可以正常用 如果不想進行修改可以用get形式)
5)本demo可以直接運行 本來想測試protobuf進行數據處理的 要放在github上就改成json了(entity中有簡單的xml解析:Menu.java 其他的都是json的 json 也可用Gson更方便)
先介紹下流程圖