最近在做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);