我使用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) {}
}
});
基本上,问题解决了,每次用户立即进出时,应用程序都不会崩溃。对于这个问题,仍然可能有更好的解决方案。
我检查并改造了没有取消请求功能!
答案 0 :(得分:3)
可能取消Retrofit 2中的Retrofit请求(测试版现已上市。)
call.cancel();// as simple as that
答案 1 :(得分:2)
您需要添加检查成功和失败方法,就像使用asynctask检查时一样,如果上下文仍然存在,或者在活动或片段的onResume / onPause上设置isActive字段。