我是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。
答案 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