【问题标题】:NullPointerException When back from backgroundNullPointerException 从后台返回时
【发布时间】:2013-09-06 04:48:16
【问题描述】:

我的应用有大约 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;}

【问题讨论】:

  • 你能发布你的单身课程吗?
  • 如果不长,可以用SharedPreferance而不是vo类来存储数据。
  • @SilentKiller 我可以保存但我想重启而不是恢复...
  • @BirajZalavadia onCreate 没有问题,返回并使用用户时,会出现类似 onClick() 方法中的代码的异常
  • 为什么你从 MainApplication.java 访问 User's 数据而不是保持它在持久状态?

标签: android garbage-collection nullpointerexception android-activity


【解决方案1】:

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

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

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

void onRestoreInstanceState(Bundle savedInstanceState) {
   ...
   user = savedInstanceState.getParcelable("user");
   ...
}

【讨论】:

    【解决方案2】:

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

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

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

    可能的解决方案是:

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

    覆盖 Activity B 中的 backPress:

    @Override
        public void onBackPressed() {
            super.onBackPressed();
                //here pass the captured user value back to Activity A.....
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多