Heim  >  Fragen und Antworten  >  Hauptteil

java - 怎样才能在UI线程中等待okhttp返回结果才进行下一步

PHP中文网PHP中文网2717 Tage vor389

Antworte allen(6)Ich werde antworten

  • PHPz

    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);
    ...
    

    Antwort
    0
  • 阿神

    阿神2017-04-18 10:03:13

    推荐rxjava+retrofit

    Antwort
    0
  • PHP中文网

    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");
    
    //当然,注意判空哦
    

    Antwort
    0
  • PHPz

    PHPz2017-04-18 10:03:13

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

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-18 10:03:13

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

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:03:13

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

    Antwort
    0
  • StornierenAntwort