怎样才能在UI线程中等待okhttp返回结果才进行下一步
在onCreate()方法中的代码如下:
kHttpClient mOkHttpClient = new OkHttpClient();
RequestBody mRequestBody = new FormBody.Builder().add("imei",imei).build();
Request mRequest = new Request.Builder().post(mRequestBody).url(url).build();
mOkHttpClient.newCall(mRequest).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.code() == 404){
Log.d(logTag,"请求缺少IMEI参数");
}
else if (response.code() == 405){
Message message = new Message();
message.what = 3;
handler.sendMessage(message);
}else if (response.body().string() == "IMEIForbidden"){
Message message = new Message();
message.what = 4;
handler.sendMessage(message);
}
String version = response.body().string();
}
});
我想要的逻辑是这样的:
从一个URL接口中获取一个String值(上述代码中的version),获取到version值后再去调用下一个接口。
在安卓中网络请求得开线程,所以就用了okhttp的enqueue方法,可是在这个方法中获取到的response值,怎么传递到UI线程中呢,并且让UI线程的代码等待获取到这个值才继续执行
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
用Handler:
推荐rxjava+retrofit
不贴代码,只讲一下思路。
本来呢,异步进行网络请求,除了避免anr之外,还有一个重要的原因那就是实现并行操作。而你想要的效果其实是同步执行的效果。
所以实现方式就是handler处理数据,另外用一个loading view来隔离用户操作。拿到回调之后再处理。
你请求到数据后直接把
version
用msg.obj=version
装进去,然后在OnCreate中handleMessage(Message msg)
获取version再继续异步请求数据就可以啦啊楼上几个答案都不错了。我额外来一下,square家族里okhttp非常好用,如果加上家族本身的retrofit就更加好用了,Retrofit+Rx对于线程间的处理非常良好,异常处理也非常好。