使用Retrofit时,调用onPause()时我应该如何处理我的调用?

时间:2017-05-23 02:13:28

标签: android retrofit retrofit2

我是Retrofit 2.0的新手。我正在进行标准调用以获取数据:

final Call<HomeFeedContainer> call = service.getHomeFeed(token, placement);

call.enqueue(new Callback<HomeFeedContainer>() {
@Override
public void onResponse(Call<HomeFeedContainer> call, Response<HomeFeedContainer> response) {
    //stuff
}

@Override
public void onFailure(Call<HomeFeedContainer> call, Throwable t) {
    //stuff
}
});

我注意到即使我暂停/终止应用程序,调用也会成功完成。我想在发生这种情况时使用call.cancel(),但我无法访问onPause()中的这个本地对象。如果我使Call成为我的类的成员,我当然可以取消onPause()中的调用,但我不能使用Call对象进行另一个调用。如果我想再次拨打电话,我必须将其设置为新的Call对象。这似乎不是正确的做法。

当用户暂停应用时,我该如何处理我的Call对象? THX。

1 个答案:

答案 0 :(得分:1)

而不是取消正在进行的api通话。使用布尔值来检查app是否在后台。

检查应用是背景还是前景:Link

final Call<HomeFeedContainer> call = service.getHomeFeed(token, placement);

call.enqueue(new Callback<HomeFeedContainer>() {
@Override
public void onResponse(Call<HomeFeedContainer> call, Response<HomeFeedContainer> response) {
    //stuff
    if(appForground){
     //do stuff related to UI and all
    }  


}

@Override
public void onFailure(Call<HomeFeedContainer> call, Throwable t) {
    //stuff
}
});

更新:如果要取消正在进行的Retrofit API调用,可以使用call.cancel()。

当你调用cancel()时onFailure()方法被执行。您可以使用isCancelled()来检查api呼叫是否被取消或设备是否没有互联网连接。有关详细信息,请访问:Link