天天看點

AsyncHttpClient中的異步問題

最近在做AsyncHttpClient異步回調時,其中在另一個回調中又調用了這個回調,報錯如下:

OkHttp Dispatcher java.lang.IllegalArgumentException: Synchronous ResponseHandler used in AsyncHttpClient. You should create your response handler in a looper thread or use SyncHttpClient instead.

查找了原因後發現,程式在運作過程中,一些耗時的請求操作會在子線程中進行,是以一些請求API的回調函數會在子線程中使用,但是AsyncHttpClient是異步機制,其使用的ResponseHandler是同步的,如果這時還在子線程中進行調用,就會報錯。

解決辦法如下:

利用Handler機制

在Handler中進行擷取操作:

@SuppressLint("HandlerLeak")
    final Handler mHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if (msg.arg1==0){
                
            }
        }
    };
           

空白處的代碼用來根據自身需求的擷取操作(如get/post/put)等

子線程中向Handler傳遞消息:

Message msg=mHandler.obtainMessage();
                                msg.arg1=0;
                                mHandler.sendMessage(msg);