当我的应用程序启动时,它只会强行关闭。
我检查了 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);}
}
答案 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);