检查用户是否已登录时强制关闭

时间:2017-06-03 17:01:26

标签: java android

当我的应用程序启动时,它只会强行关闭。

我检查了 logcat ,这是错误:

  

java.lang.NullPointerException:尝试在空对象引用

上调用虚方法'boolean prefs.UserSession.isUserLoggedin()'

我不知道为什么会发生这种情况因为我是Android开发的新手:(

这是我的 Authentication.java (这是第一个在应用程序启动时打开的活动/类)

...
import prefs.UserInfo;
import prefs.UserSession;
...

public class Authentication extends AppCompatActivity {
    private UserSession session;
    private UserInfo userInfo;
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    ...
       if(session.isUserLoggedin()){
            startActivity(new Intent(this, Mainpage.class));
            finish();
        }
    ...

这是我的 UserSession.java (一个处理会话的类)

...
import android.content.Context;
import android.content.SharedPreferences;

public class UserSession {
    ....
    private static final String KEY_IS_LOGGED_IN = "isloggedin";
    SharedPreferences prefs;
    SharedPreferences.Editor editor;
    Context ctx;

    public UserSession(Context ctx) {
        this.ctx = ctx;
        prefs = ctx.getSharedPreferences(PREF_NAME, ctx.MODE_PRIVATE);
        editor = prefs.edit();
    }
    public void setLoggedin(boolean isLoggedin){
        editor.putBoolean(KEY_IS_LOGGED_IN, isLoggedin);
        editor.apply();
    }
    public boolean isUserLoggedin(){return prefs.getBoolean(KEY_IS_LOGGED_IN, false);}
}

1 个答案:

答案 0 :(得分:0)

在您的代码中,您使用参数作为活动的上下文。

public UserSession(Context ctx) {
        this.ctx = ctx;
        prefs = ctx.getSharedPreferences(PREF_NAME, ctx.MODE_PRIVATE);
        editor = prefs.edit();
    }

所以你应该使用context.Without context初始化你的用户会话对象,你收到了空对象引用

private UserSession session=new UserSession(this);