我有以下场景:我有一个模型类,如下所示:
public class UserModel implements Serializable {
private String userEmail, userName;
public UserModel() {}
public UserModel(String userEmail, String userName) { this.userEmail = userEmail; this.userName = userName;}
//setters and getters
}
在我的第一个活动中,我登录了Firebase,我从FirebaseUser
对象获取数据,然后我创建了{{1}的对象} class并将其传递给这样的意图:
UserModel
在第二个活动中,每次启动时,我都会检查用户是否已登录。如果是,它会留在这里,如果不是,我会重定向到第一个活动。在这里,我使用以下代码行获取对象:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("userModel", userModel);
startActivity(intent);
第一次活动开始时,一切正常,但当我重新开始活动时,我得到一个UserModel userModel = (UserModel) getIntent().getSerializableExtra("userModel");
。如何通过任何活动重新启动来保留我从意图中获得的NullPointerException
对象?
提前致谢!
答案 0 :(得分:1)
你应该看一下Activity Lifecycle。你会找到一个名为onSavedInstanceState()
的方法。现在你要做的是使用该方法将类的对象存储在bundle中,然后将其返回onCreate()
,如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
UserModel userModel = (UserModel) savedInstanceState.getSerializable("userModel");
} else if (getIntent() != null) {
UserModel userModel = (UserModel) getIntent().getSerializableExtra("userModel");
} else {
// These is no data
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("userModel", userModel);
}
答案 1 :(得分:1)
您必须将模型保留到外部存储。一些可行的选择是:
onPause()
,在onResume()
或onCreate()
中恢复;这是一个快速example。例如通过覆盖以下回调来通过SaveInstanceState:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
/* savedInstanceState Bundle will be passed onto onCreate() when activity
* gets killed and restarted. */
savedInstanceState.putSerializable("userModel", userModel);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
/* Also being passed onto onCreate(). */
UserModel mUserModel = (UserModel) savedInstanceState.getSerializable("userModel");
}
首先对意图进行空值检查,可以节省一些处理时间,同时不进行任何冗余操作。