java - 怎样才能在UI线程中等待okhttp返回结果才进行下一步
PHP中文网
PHP中文网 2017-04-18 10:01:13
[Java讨论组]
PHP中文网
PHP中文网

认证0级讲师

全部回复(6)
PHPz

用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);
...
阿神

推荐rxjava+retrofit

PHP中文网
//方法一
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");

//当然,注意判空哦
PHPz

不贴代码,只讲一下思路。
本来呢,异步进行网络请求,除了避免anr之外,还有一个重要的原因那就是实现并行操作。而你想要的效果其实是同步执行的效果。
所以实现方式就是handler处理数据,另外用一个loading view来隔离用户操作。拿到回调之后再处理。

PHP中文网

你请求到数据后直接把versionmsg.obj=version装进去,然后在OnCreate中handleMessage(Message msg)获取version再继续异步请求数据就可以啦啊

天蓬老师

楼上几个答案都不错了。我额外来一下,square家族里okhttp非常好用,如果加上家族本身的retrofit就更加好用了,Retrofit+Rx对于线程间的处理非常良好,异常处理也非常好。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号