我的应用程序有大约3个深度的活动层次。
许多活动或片段在MainApplication中使用UserVo。
所以我将UserVo置于活动或片段中。
UserVo user;
onCreate() {
user = MainApplicatoin.getSingleton().getUser();
// ...
}
// ...
onClick(View v) {
textView.setText(user.getData().name);
}
但有时从背景回到我的应用程序时会出现NullPointerException。
我认为它是由GC发生的。
如何防止用户== null,或者在用户== null时重启我的应用程序?
==
MainApplication.java(我将它设置为清单中的应用程序)
private static MainApplication sigleton;
@Override
public void onCreate() {
super.onCreate();
singleton = this;
}
MainApplication getSington() {
return singelton;}
答案 0 :(得分:0)
我猜这条线在按下后退按钮时会出现问题:
user = MainApplicatoin.getSingleton().getUser();
当你移动到下一个活动时,用户在当前活动中变为空(让我们说活动A)(让我们说活动B)。所以当你按回来时你会得到零点异常。
可能的解决方案是:
当您尝试从A移动到活动B时(可能按下按钮),将'user'的值传递给下一个活动B,然后将其捕获。
覆盖活动B中的backPress:
@Override
public void onBackPressed() {
super.onBackPressed();
//here pass the captured user value back to Activity A.....
}
答案 1 :(得分:0)
我认为这是关于你的应用程序何时进入后台,系统可能会在低成本时回收它。
因此,您可以将UserVo变为Parcelable类,将其保存在activity的onSaveInstanceState函数中,并在onRestoreInstanceState函数中读取它,代码如下。
void onSaveInstanceState(Bundle outState) {
...
outState.putParcelable("user", user);
...
}
void onRestoreInstanceState(Bundle savedInstanceState) {
...
user = savedInstanceState.getParcelable("user");
...
}