我想使用共享首选项跳过登录活动,但每当我尝试实现此代码时,都会发生java.lang.nullpointerexception
错误。这是启动或登录屏幕的java代码。在这里,我没有闪屏。
public class MainActivity extends Activity {
Button sub;
SharedPreferences prefs;
EditText useret,pwdet;
String IS_LOGIN = "IsLoggedIn";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(this.isLoggedIn()==true) {
checklogin();
}
setContentView(R.layout.activity_main);
useret=(EditText) findViewById(R.id.etuser);
pwdet=(EditText) findViewById(R.id.etpwd);
sub=(Button) findViewById(R.id.submit);
sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String username=useret.getText().toString();
String password=pwdet.getText().toString();
prefs=getSharedPreferences("codelearn_twitter", MODE_PRIVATE);
SharedPreferences.Editor editor=prefs.edit();
editor.putString("key_for_username",username);
editor.putString("key_for_passwrd",password);
editor.putBoolean(IS_LOGIN, true);
editor.commit();
Intent i=new Intent(MainActivity.this,listactivity.class);
startActivity(i);
}
});
}
public void checklogin(){
if(this.isLoggedIn()==true){
Intent i=new Intent(MainActivity.this,listactivity.class);
startActivity(i);
finish();
}
}
public boolean isLoggedIn(){
return prefs.getBoolean(IS_LOGIN, false);
}
}
下面是错误列表..
08-19 17:58:17.061 14978-14978 / com.example.viren.codelearn
E / AndroidRuntime:致命异常:主要 处理:com.example.viren.codelearn,PID:14978 java.lang.RuntimeException:无法启动活动 ComponentInfo {com.example.viren.codelearn / com.example.vire n.codelearn.MainActivity}:显示java.lang.NullPointerException 在android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2305) 在android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2363) 在android.app.ActivityThread.access $ 900(ActivityThread.java:161) 在android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1265) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:157) 在android.app.ActivityThread.main(ActivityThread.java:5356) at java.lang.reflect.Method.invokeNative(Native Method) 在java.lang.reflect.Method.invoke(Method.java:515) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1265) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) at dalvik.system.NativeStart.main(Native Method) 引起:java.lang.NullPointerException 在com.example.viren.codelearn.MainActivity.isLoggedIn (MainActivity.java:56) 在com.example.viren.codelearn.MainActivity.onCreate (MainActivity.java:23) 在android.app.Activity.performCreate(Activity.java:5426) 在android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1105) 在android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2269) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
答案 0 :(得分:2)
查看您的堆栈跟踪,您可以看到在第56行,您调用 isLoggedIn 调用 prefs 变量,该变量尚未初始化(它为空),因此你得到空指针异常。
让 prefs 变量可供整个类访问,并在调用 isLoggedIn 之前初始化它,或在 isLoggedIn 方法中初始化它。
答案 1 :(得分:0)
此时您的首选项未初始化... 你必须
prefs=getSharedPreferences("codelearn_twitter", MODE_PRIVATE);
返回之前
return prefs.getBoolean(IS_LOGIN, false);
答案 2 :(得分:0)
当您调用isLoggedIn()
时,它返回共享首选项中的值,但共享首选项实例尚未初始化并且在调用
if(this.isLoggedIn()==true) {
checklogin();
}
您必须初始化共享首选项变量
prefs=getSharedPreferences("codelearn_twitter", MODE_PRIVATE);
那是:
prefs=getSharedPreferences("codelearn_twitter", MODE_PRIVATE);
if(this.isLoggedIn()==true) {
checklogin();
}
答案 3 :(得分:0)
在调用之前,您必须先初始化您的SharedPreferences。
prefs = getSharedPreferences("codelearn_twitter", MODE_PRIVATE);
if (this.isLoggedIn() == true) {
checklogin();
}
prefs = getSharedPreferences("codelearn_twitter", MODE_PRIVATE);
if (this.isLoggedIn() == true) {
checklogin();
}