app 出错了...? 什么原因呢?我们看下错误信息
image.png
image.png
错误说:只有UI线程才能去更新控件
txtView.setText(response.body().string ());
也就说明我们这段显示响应信息的代码是在子线程中执行的。从而反应出我们的 new Callback() 回调方法并不是在我们的主线程里,而是在子线程里。
那我们改造下代码,将显示响应信息放在主线程中再去执行。
//第四步 call对象调用enqueue()方法,通过Callback()回调拿到响应体Response
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//异步请求失败之后的回调
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//异步请求成功之后的回调
final String str = response.body().string ();
runOnUiThread(new Runnable() {
@Override
public void run() {
txtView.setText(str);
}
});
}
});
这样就没有问题了!
注意事项:onResponse() 和 onFailure() 两个回调方法都是在工作线程也就是子线程当中去执行的
这里异步请求就完成了。
网友评论