0

我的应用程序有大约 3 个深度的活动层次结构。

并且许多活动或片段在 MainApplication 中使用 UserVo。

所以我在活动或片段中得到了 UserVo。

UserVo user;

onCreate() {
    user = MainApplicatoin.getSingleton().getUser();
    // ...
}
// ...
onClick(View v) {
    textView.setText(user.getData().name);
}

但有时从后台返回我的应用程序时会发生 NullPointerException。

我认为它是由 GC 发生的。

如何防止 user == null,或者当 user == null 时重新启动我的应用程序?

==

MainApplication.java (我将其设置为清单中的应用程序)

private static MainApplication sigleton;
@Override
public void onCreate() {
    super.onCreate();

    singleton = this;
    }

MainApplication getSington() {
    return singelton;}
4

2 回答 2

0

我猜当您按下后退按钮时,这条线会导致问题:

user = MainApplicatoin.getSingleton().getUser();

当您移动到下一个活动(假设活动 B)时,用户在当前活动(假设活动 A)中变为空。因此,当您按下返回时,您会得到空点异常。

可能的解决方案是:

当您尝试从 A 移动到活动 B 时(可能是按下按钮),将“用户”的值传递给下一个活动,即活动 B。然后在那里捕获它。

覆盖活动 B 中的 backPress:

@Override
    public void onBackPressed() {
        super.onBackPressed();
            //here pass the captured user value back to Activity A.....
    }
于 2013-09-06T05:22:43.357 回答
0

我认为这是关于当您的应用程序进入后台时,系统可能会在内存不足时回收它。

所以可以把UserVo变成一个Parcelable类,保存在activity的onSaveInstanceState函数中,在onRestoreInstanceState函数中读取,代码如下。

void onSaveInstanceState(Bundle outState) {
   ...
   outState.putParcelable("user", user);
   ...
}

void onRestoreInstanceState(Bundle savedInstanceState) {
   ...
   user = savedInstanceState.getParcelable("user");
   ...
}
于 2013-09-06T05:25:28.207 回答