Я пытаюсь сохранить некоторые значения с SharedPreferences
в виде пар ключ-значение, когда приложение закрывается или уничтожается, и получить их при повторном открытии приложения.Проблема в том, что когда я вызываю для получения значений, он возвращает null
.
Я пытался передать контекст или получить контекст приложения и сделать значения static
, но это, похоже, не работает.
class SavedValues {
private static final String keyP1fName = String.valueOf(R.string.player_1_name_key);
private static final String keyP1Game = String.valueOf(R.string.player_1_game_key);
private static final String keyP2fName = String.valueOf(R.string.player_2_sname_key);
//Have other strings here
private MainGame mainGame;
SavedValues(MainGame mainGame) {
this.mainGame = mainGame;
}
//private SharedPreferences mPrefs = mainGame.getSharedPreferences("myPrefs", Context.MODE_PRIVATE);
private SharedPreferences mPrefs = mainGame.getPreferences(Context.MODE_PRIVATE);
//SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
void saveMainGameValues() {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString(keyP1fName, mainGame.fullNameP1.getText().toString());
editor.putString(keyP1Game, mainGame.gameScoreP1.getText().toString());
editor.putString(keyP2fName, mainGame.fullNameP2.getText().toString());
editor.putString(keyP2Game, maingGame.gameScoreP2.getText().toString());
editor.apply();
}
void getMainGameValues() {
mPrefs = mainGame.getPreferences(Context.MODE_PRIVATE);
if (mPrefs.contains(keyP1fName)) {
mainGame.fullNameP1.setText(mPrefs.getString(keyP1fName, "Player 1"));
mainGame.gameScoreP1.setText(mPrefs.getString(keyP1Game, "0"));
mainGame.fullNameP2.setText(mPrefs.getString(keyP2fName, "Player 2"));
mainGame.gameScoreP2.setText(mPrefs.getString(keyP2Game, "0"));
}}
}
И я пытаюсь вызвать их в моих основных действиях onStart / onStop и т. Д.
@Override
protected void onStart() {
//savedVals.getMainGameValues();
super.onStart();
}
@Override
protected void onResume() {
savedVals.getMainGameValues();
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
savedVals.saveMainGameValues();
}
@Override
protected void onStop() {
super.onStop();
savedVals.saveMainGameValues();
}
@Override
protected void onDestroy() {
super.onDestroy();
savedVals.saveMainGameValues();
}
Я должен получить последний найденныйзначения или, по крайней мере, значения по умолчанию, но вместо этого приложение вылетает и получает следующую ошибку для обратного вызова в onStart или onResume:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.andygix.a40love.SavedValues.getMainGameValues()' on a null object reference
at com.andygix.a40love.MainGame.onResume(MainGame.java:379)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1364)
at android.app.Activity.performResume(Activity.java:7490)