在离开活动或片段时取消Retrofit请求或处理它们 - android

时间:2015-10-08 08:43:23

标签: android retrofit

我使用Retrofit library来处理来自我的WCF网络服务的JSON响应。

RestService.getRestService().search("tools", new Callback<SearchResult>() {
    @Override
    public void success(SearchResult searchResult, Response response) {
        if( searchResult == null) return;
        textView.setText(searchResult.toString());
    } // end of success(

    @Override
    public void failure(RetrofitError error) {
            showToast(R.string.internet_sikintisi);

    }
});

我注意到如果我离开我调用此函数的片段或活动,我会收到错误。因为我在textView中设置了活动或片段尚未存在的文本。

我将代码修改为:

RestService.getRestService().search("tools", new Callback<SearchResult>() {
    @Override
    public void success(SearchResult searchResult, Response response) {

        if( searchResult == null) return;
        try{
            textView.setText(searchResult.toString());
        } catch(Exception e) {}

    } // end of success(

    @Override
    public void failure(RetrofitError error) {
        try{
                showToast(R.string.internet_sikintisi);
            } catch(Exception e) {}
    }
});

基本上,问题解决了,每次用户立即进出时,应用程序都不会崩溃。对于这个问题,仍然可能有更好的解决方案。

我检查并改造了没有取消请求功能!

2 个答案:

答案 0 :(得分:3)

可能取消Retrofit 2中的Retrofit请求(测试版现已上市。)

 call.cancel();// as simple as that

答案 1 :(得分:2)

您需要添加检查成功和失败方法,就像使用asynctask检查时一样,如果上下文仍然存在,或者在活动或片段的onResume / onPause上设置isActive字段。