【发布时间】:2017-09-28 20:37:31
【问题描述】:
我从 Fragment 发起大部分网络调用,然后使用回调告诉 Fragment 网络任务是成功还是失败,并相应地更新 ui。
在极少数情况下(0.25% 的会话),由于 getActivity() 在我的回调中的代码运行时返回 null,我的程序会因空指针异常而崩溃。我知道我可以对 getActivity() 使用空检查来防止这种情况发生,但是处理这个问题的最佳做法是什么?
null 检查似乎只不过是一个崩溃预防工具,因为程序仍然需要来自网络任务的数据。
代码如下所示:
private void queryServer() {
// networking task should query server for user id, if successful store it
// in user preferences to be accessed by fragment in callback
new networkingTask(new VolleyCallback() {
@Override
public void onSuccess() {
// code below needs null check on getActivity - but what else?
mUserId = new UserPreferences(getActivity()).getUserId();
}
@Override
public void onFail() {
// booooo
}
});
}
【问题讨论】:
-
你应该熟悉片段和活动的生命周期方法。可能发生的是系统正在停止或销毁 Activity/Fragment 对。发生这种情况的原因有很多,例如屏幕方向更改。因为您的处理程序是片段对象上的一个方法,所以在调用返回时您正在使用“死”片段。有几种模式可以处理这个问题。简而言之,您需要让您的处理程序知道当前的片段,您可以通过使用生命周期方法来完成此操作。
标签: android android-fragments android-lifecycle