我是Android开发的初学者。我想保存用户登录数据,以便他在暂停和恢复应用程序后或当他再次使用该应用程序时不必登录。经过一些关于stackoverflow的文章之后,我意识到onSavedInstance是做到这一点的方法。
我已经在一个loginActivity中实现了这些方法,但是当我在模拟器上打开此活动时,应用程序给出了一个错误。错误是不幸的是,“ Project_name”已停止
所以,我检查了日志文件,并得到了
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'boolean android.os.Bundle.getBoolean(java.lang.String)'
在线上
boolean inSession = savedInstanceState.getBoolean(“ loggedin”);
在onViewStateRestored方法中。
有人可以帮我找出问题所在吗?还有什么更好的方法来存储登录详细信息,以便用户不必在应用程序进入暂停或停止模式时都登录?
我在这里先向您的帮助表示感谢。:)
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
if(inSession){
savedInstanceState.putBoolean("loggedin",true);
savedInstanceState.putString("email",emailcol);
savedInstanceState.putString("password",passwordcol);
savedInstanceState.putString("type","login");
}
else{
savedInstanceState.putBoolean("loggedin",false);
}
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
boolean inSession = savedInstanceState.getBoolean("loggedin");
if (inSession) {
String email = savedInstanceState.getString("email");
String pass = savedInstanceState.getString("password");
String type = "login";
BackgroundWorker bw = new BackgroundWorker(this.getContext());
//(Name,password,email,contact,address,type
bw.execute(null, pass, email, null, null, type);
}
}
根据android文档,当您的活动先前被销毁后重新创建时,您可以从捆绑包中恢复系统通过活动的保存状态。onCreate()和onRestoreInstanceState()回调方法都接收包含实例状态信息的同一个Bundle。
因为onCreate()方法是系统是创建活动的新实例还是重新创建活动的实例而调用的,所以在尝试读取状态Bundle之前,必须检查其状态是否为null。如果为空,则系统将创建活动的新实例,而不是还原先前被破坏的活动。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // Always call the superclass first
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
// Restore value of members from saved state
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
} else {
// Probably initialize members with default values for a new instance
}
...
}
您可能应该使用“共享首选项”存储用户登录信息
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句