首頁  >  問答  >  主體

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

PHP中文网PHP中文网2765 天前420

全部回覆(6)我來回復

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

    回覆
    0
  • 阿神

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

    推薦rxjava+retrofit

    回覆
    0
  • PHP中文网

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

    雷雷

    回覆
    0
  • PHPz

    PHPz2017-04-18 10:03:13

    不貼程式碼,只講一下思路。
    本來呢,非同步進行網路請求,除了避免anr之外,還有一個重要的原因那就是實現並行操作。而你想要的效果其實是同步執行的效果。
    所以實作方式就是handler處理數據,另外用一個loading view來隔離使用者操作。拿到回調之後再處理。

    回覆
    0
  • PHP中文网

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

    你請求到資料後直接把versionmsg.obj=version装进去,然后在OnCreate中handleMessage(Message msg)取得version再繼續非同步請求資料就可以啦啊

    回覆
    0
  • 天蓬老师

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

    樓上幾個答案都不錯了。我額外來一下,square家族裡okhttp非常好用,如果加上家族本身的retrofit就更加好用了,Retrofit+Rx對於線程間的處理非常良好,異常處理也非常好。

    回覆
    0
  • 取消回覆