跳过登录活动

时间:2015-08-19 12:57:34

标签: java android nullpointerexception sharedpreferences

我想使用共享首选项跳过登录活动,但每当我尝试实现此代码时,都会发生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)


4 个答案:

答案 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()时,它返回共享首选项中的值,但共享首选项实例尚未初始化并且在调用

之前为null
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();
}