Android:检查Application类中的登录状态

时间:2015-10-20 22:32:38

标签: java android nullpointerexception

我想实现一个检查全局应用程序级别的登录状态的代码,因此我创建了一个扩展Application类的ApplicationController类。

%c

但是当我运行应用程序时,它显示一条错误消息,由于nullpointerexception它无法创建应用程序。总结上面的日志,我的应用程序的三个部分中抛出了异常:

public class ApplicationController extends Application {

    private static ApplicationController mInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;

        SessionManager session = new SessionManager(getApplicationContext());
        if(!session.isLoggedIn()) {
            session.logout();
        }
    }

    public static ApplicationController getInstance() {
        return mInstance;
    }
}

第一部分是ApplicationController类中的以下部分。

10-21 00:04:26.161 1397-1397/? E/AndroidRuntime:     at com.marshall.opensurvey.application.session.SQLiteHandler.deleteUsers(SQLiteHandler.java:129)
10-21 00:04:26.161 1397-1397/? E/AndroidRuntime:     at com.marshall.opensurvey.application.controller.SessionManager.logout(SessionManager.java:51)
10-21 00:04:26.161 1397-1397/? E/AndroidRuntime:     at com.marshall.opensurvey.application.controller.ApplicationController.onCreate(ApplicationController.java:33)

其次,这是SessionManager类,logout方法导致NullPointerException。

SessionManager session = new SessionManager(getApplicationContext());
        if(!session.isLoggedIn()) {
            session.logout();
        }

最后,上面logout()方法中的deleteUsers()方法导致NullPointerException。 deleteUsers()方法位于下面的SQLiteHandler类中。

public class SessionManager {
    // LogCat tag
    private static String TAG = SessionManager.class.getSimpleName();

    // Shared Preferences
    private SharedPreferences pref;
    private Editor editor;
    private Context _context;

    private SQLiteHandler db = new SQLiteHandler(_context);

    // Shared pref mode
    private int PRIVATE_MODE = 0;

    // Shared preferences file name
    private static final String PREF_NAME = "OpenSurvey";

    private static final String KEY_IS_LOGGEDIN = "isLoggedIn";

    public SessionManager(Context context) {
        this._context = context;
        pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = pref.edit();
    }

    public void setLogin(boolean isLoggedIn) {

        editor.putBoolean(KEY_IS_LOGGEDIN, isLoggedIn);

        // commit changes
        editor.commit();

        Log.d(TAG, "User login session modified!");
    }

    public boolean isLoggedIn(){
        return pref.getBoolean(KEY_IS_LOGGEDIN, false);
    }

    public void logout() {
        setLogin(false);
        db.deleteUsers();
    }
}

我知道NullPointerException是如此基本,我担心这个问题会给你带来负面的声誉,但是我用它工作了3个多小时仍然无法弄清楚问题是什么..所以请帮助我

0 个答案:

没有答案