2015-07-07 3 views
1

Я пытаюсь сохранить логическое имя с именем «первым», что означает, было ли запущено действие впервые с момента установки приложения. Логическое значение «first» изначально истинно, но затем установлено значение false после того, как действие было использовано один раз (т.е. значение установлено на false, прямо перед запуском следующего действия). Я попытался сохранить это логическое значение с помощью SharedPreferences, но всякий раз, когда я запускаю приложение после его убийства, MainActivity все еще отображается снова (это не должно произойти, если «first» is false »).SharedPreferences, не сохраняющий

My MainActivity.java выглядит так -

protected final static String INTENT_KEY = "NAME"; 
private static final String PREFS_NAME = "SaveStates"; //The SharedPreferences file name. 
private Boolean first = true; // Signifies whether the app started for the first time. 
SharedPreferences settings; 
SharedPreferences.Editor editor; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    settings = getSharedPreferences(PREFS_NAME, 0); 
    editor = settings.edit(); 
    resetParam(); // Retrieving the boolean "first". 
    // Start the next activity if the app has been started before. 
    if (!first) { 
     Intent intent = new Intent(this, DisplayMessageActivity.class); 
     startActivity(intent); 
    } 
    setContentView(R.layout.activity_main); 
} 

/** Sends the name input by the user to the next activity */ 
public void sendMessage(View view) { 
    Intent intent = new Intent(this, DisplayMessageActivity.class); 
    EditText editText = (EditText) findViewById(R.id.edit_name); 
    String name = editText.getText().toString(); 
    // Send name to next activity if it's not empty. 
    if (!("".equals(name))) { 
     setParam(); // SETTING AND SAVING "first" AS FALSE. 
     intent.putExtra(INTENT_KEY, name); 
     startActivity(intent); 
    } 
} 

/** Saving the Boolean "first" in the SharedPreferences PREF_NAME file */ 
private void setParam() { 
    // Saving the Boolean "first" in the SharedPreferences PREF_NAME file. 
    editor.clear(); 
    editor.putBoolean("first", false); 
    editor.commit(); 
} 

/** Retrieving the Boolean "first" from the SharedPreferences PREF_NAME file */ 
private void resetParam() { 
    first = settings.getBoolean("first", true); 
} 

Когда я использую приложение в первый раз (то есть «первый» истинно), перейдите к следующему действию (то есть «первый» установлен в ложь перед началом следующей активности), убить приложение полностью, и возвращайтесь к нему, почему я снова начинаю с MainActivity? Почему «первый» не был сохранен как false в моем файле SharedPreferences (PREFS_NAME)?

ответ

1

Ты делаешь это неправильно.

Пожалуйста, обратите внимание на how you use SharedPreferences.

Я, лично, использовать this method:

Используйте это, чтобы СОХРАНИТЬ значений в SharedPreferences:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putString("Name","Harneet"); 
editor.apply(); 

Используйте этот чтения значения из SharedPreferences:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
String name = preferences.getString("Name", ""); 
if(!name.equalsIgnoreCase("")) 
{ 
    name = name + " Sethi"; /* Edit the value here*/ 
} 
Смежные вопросы