Heim > Fragen und Antworten > Hauptteil
PHPz2017-04-18 10:03:13
用Handler:
//在onCreate()方法外定义一个Handler :
Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case UI_OPRATION:
doSomething();
break;
}
super.handleMessage(msg);
}
};
//调用处
...
String version = response.body().string();
myHandler.sendMessage(UI_OPRATION);
...
PHP中文网2017-04-18 10:03:13
//方法一
message.obj = version;
//方法二
Bundle bundle = new Bundle();
bundle.putCharSequence("你的KEY",version);
message.setData(bundle);
//UI里的handle里面用
Bundle bundle = message.getData();
String version = bundle.getCharSequence("你的KEY");
//或者直接
String version = message.getData().getCharSequence("你的KEY");
//当然,注意判空哦
PHPz2017-04-18 10:03:13
不贴代码,只讲一下思路。
本来呢,异步进行网络请求,除了避免anr之外,还有一个重要的原因那就是实现并行操作。而你想要的效果其实是同步执行的效果。
所以实现方式就是handler处理数据,另外用一个loading view来隔离用户操作。拿到回调之后再处理。
PHP中文网2017-04-18 10:03:13
你请求到数据后直接把version
用msg.obj=version
装进去,然后在OnCreate中handleMessage(Message msg)
获取version再继续异步请求数据就可以啦啊
天蓬老师2017-04-18 10:03:13
楼上几个答案都不错了。我额外来一下,square家族里okhttp非常好用,如果加上家族本身的retrofit就更加好用了,Retrofit+Rx对于线程间的处理非常良好,异常处理也非常好。