我有登录按钮,当用户点击它时,我打电话给Api-Service(我使用改装)来检查他/她是否已注册,这样的事情
Thread.currentThread().setContextClassLoader(myClassLoader)
我怎么能等到这个过程结束并返回正确的值? (虽然这个电话是异步的)
我的最后一次尝试:我把这个方法放在AsynTask中并从OnPostExecute获取返回值,但它似乎不能正常工作!
答案 0 :(得分:4)
实现这一目标的最简单也许最好的方法是使用事件。以下是如何使用名为EventBus的库进行尝试。
使用gradle,将以下行添加到依赖项部分:
compile 'de.greenrobot:eventbus:2.4.0'
现在,在活动的 onCreate 方法或片段中注册EventBus,以便在Retrofit请求成功或失败时通知您。您使用如下行注册EventBus:
EventBus.getDefault().register(this);
创建一个简单的POJO(Plain Old Java Object),你可以称之为 RetrofitEvent ,并添加一个变量,如:
public boolean isRetrofitCompleted;
然后在此类的构造函数中初始化此变量。如果需要,可以添加setter方法,但这不是必需的。
现在,在您的Retrofit onSuccess()方法中,您可以使用以下行通知活动或片段事件已成功完成:
EventBus.getDefault().post(new RetrofitEvent(true));
如果失败了:
EventBus.getDefault().post(new RetrofitEvent(false));
现在返回您的活动类或片段,并通过覆盖 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.
}
}
EventBus.getDefault().unregister(this);