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