android sharedpreferences: nullPointerException - PullRequest
0 голосов
/ 07 января 2019

Привет, я пытаюсь сохранить информацию пользователя после регистрации и когда время запуска приложения, необходимо отправить на главную страницу, но я не хочу показывать страницу входа ...

enter image description here

в классе Регистрация Активность: примечание: этот код от RegisterActivity

// for save status user
public void setSession(){
    // made model of sharePrefrence
   SharedPreferences  sp = getSharedPreferences(Key_SessionUsers,Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putBoolean(Key_Status,true);
    editor.commit();

}

в классе Регистрация ВойтиДеятельность: примечание: "setSession ()" от registerActivity, которые вызывают в классе LoginActivity.

try {
    RegisterActivity registerActivity = new RegisterActivity();
    if (registerActivity.sp.getBoolean(registerActivity.Key_Status,false) == true){
        startActivity(new Intent(LoginActivity.this , MainActivity.class));
    }

}catch (Exception e){
Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();
}

Ошибка: nullPointerException.

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Это не то, как получить данные с SharedPreferences. Вы можете получить логическое значение следующим образом:

//Create and initialize your sharedpreferences object
SharedPreferences sp = getSharedPreferences(Key_SessionUsers,Context.MODE_PRIVATE);

//get your boolean from the sharedpreferences object
boolean val = getSharedPreferences.getBoolean(registerActivity.Key_Status,false);

Поскольку у вас есть логическое значение сразу после этого, вы можете продолжить и сравнить.

Надеюсь, это поможет .. Веселое кодирование !!

0 голосов
/ 07 января 2019

этот метод для сохранения значения в sharedPreferences и хорошо работает

public void setSesstionUser(){
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(RegisterActivity.this);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putBoolean("Status_user", true);
    editor.apply();

// пользователь входит в систему, затем Status_user => true

}

этот метод может называться любым классом. Например, у меня есть Регистрационная активность, и я хочу сохранить сеанс для пользователя после того, как зарегистрирую информацию о пользователе на сервере ... и все же сохранить в defualt sharePrefrence .. поэтому при хранении пользовательской информации на сервере мы должны использовать method '' setSesstionUser() 'для хранения sharePrefrence

так, наконец, быть вызванным в классе, что ...

   // check_state_user --------------------------------------------------------
    try {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this);
        boolean memberStatus = preferences.getBoolean("Status_user", false);
        if(memberStatus){ startActivity(new Intent(this,MainActivity.class)); finish();}

    }catch (Exception e){
       // Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();
    }

этот метод поможет нам, если для входа в систему пользователь в приложении в порядке ==> так что перейдем на главную страницу

фотография 1: enter image description here

2: enter image description here

0 голосов
/ 07 января 2019

Я думаю, что это должно быть:

try {
    RegisterActivity registerActivity = new RegisterActivity();
    if (getSharedPreferences().getBoolean(registerActivity.Key_Status,false) == true){
        startActivity(new Intent(LoginActivity.this , MainActivity.class));
    }

}catch (Exception e){
Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();
}

потому что sp не является публичной переменной. Новая часть getSharedPreferences() вместо registerActivity.sp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...