等到Refrotfit返回成功或失败

时间:2015-06-29 10:15:19

标签: android retrofit

我有登录按钮,当用户点击它时,我打电话给Api-Service(我使用改装)来检查他/她是否已注册,这样的事情

Thread.currentThread().setContextClassLoader(myClassLoader)

我怎么能等到这个过程结束并返回正确的值? (虽然这个电话是异步的)

我的最后一次尝试:我把这个方法放在AsynTask中并从OnPostExecute获取返回值,但它似乎不能正常工作!

1 个答案:

答案 0 :(得分:4)

实现这一目标的最简单也许最好的方法是使用事件。以下是如何使用名为EventBus的库进行尝试。

  1. 使用gradle,将以下行添加到依赖项部分:

    compile 'de.greenrobot:eventbus:2.4.0'

  2. 现在,在活动的 onCreate 方法或片段中注册EventBus,以便在Retrofit请求成功或失败时通知您。您使用如下行注册EventBus:

    EventBus.getDefault().register(this);

  3. 创建一个简单的POJO(Plain Old Java Object),你可以称之为 RetrofitEvent ,并添加一个变量,如:

    public boolean isRetrofitCompleted;

    然后在此类的构造函数中初始化此变量。如果需要,可以添加setter方法,但这不是必需的。

  4. 现在,在您的Retrofit onSuccess()方法中,您可以使用以下行通知活动或片段事件已成功完成:

    EventBus.getDefault().post(new RetrofitEvent(true));

    如果失败了:

    EventBus.getDefault().post(new RetrofitEvent(false));

  5. 现在返回您的活动类或片段,并通过覆盖 onEvent 方法来监听此事件,如下所示:

    public void onEvent(RetrofitEvent event) {
    
       if(event.isRetrofitCompleted){
    
          //if you had  a progress dialog showing, hide it here.
          //then of course do what you needed here.
       }else{
          //the request might have failed here due to network issues
          //update the ui accordingly.
       }
    }
    
    1. 最后,请记住在onDestroy方法中取消注册EventBus,如下所示:
    2. EventBus.getDefault().unregister(this);