2016-05-21 8 views
0

現在、AndroidのSharedPreferencesで作業していますが、説明できない奇妙な動作が発生しました。これは私のコードです:SharedPreferencesに値が保存されていません

SharedPreferences appPreferences = this.getSharedPreferences("settings", Context.MODE_PRIVATE); 
appPreferences.edit().putBoolean("launched_before", true); 
appPreferences.edit().apply(); 
appPreferences = null; 
appPreferences = this.getSharedPreferences("settings", Context.MODE_PRIVATE); 
boolean test = appPreferences.getBoolean("launched_before", false); //this is false 

私のSharedPreferencesに書き込む値は保存されていません。私はgetDefaultSharedPreferences()を使うことができると知っていますが、デフォルトのファイルには他の値が格納されているので、ここではしたくありません。

私はcommit()の代わりapply()を使用する場合は、commit()の戻り値がtrueですが、私はまだ正しくファイルをロードすることはできません。

+0

が非同期動作でみてください、とあなたが同期コードの結果が保証されていません。あなたはそれを入れた後にブール値を取得しようとしましたか?私は再割り当てのポイントが表示されません –

+0

@ cricket_007どこでも私はそれを読み取ろうとすると、それは偽になります – PKlumpp

答えて

0
SharedPreferences appPreferences = contect.getSharedPreferences("settings", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = appPreferences.edit(); 
editor.putBoolean("launched_before", true); 
editor.commit(); 
appPreferences = context.getSharedPreferences("settings", Context.MODE_PRIVATE); 
boolean test = appPreferences.getBoolean("launched_before", false); 

これは試してみてください。ここで

+0

S /彼はすでに '試みた' apply()の代わりにcommit()を使用すると、コミットの戻り値()が真である ' –

+0

右、 'commit()'を試しました。このメソッド自体は、エラーがないことを示すtrueを返しますが、 'launch_before'を読み取ると、値はfalseになります。 – PKlumpp

0

キー「com.yourdomain.yourapp.your_key_name」として使用し、各値のために別のキーを使用することができます...私はSharedPreferencesを適用すると信じて、この

private SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(appContext); 

public void putBoolean(String key, boolean value) { 
    checkForNullKey(key); 
    preferences.edit().putBoolean(key, value).apply(); 
} 

public boolean getBoolean(String key) { 
    return preferences.getBoolean(key, false); 
} 

public void checkForNullKey(String key){ 
    if (key == null){ 
     throw new NullPointerException(); 
    } 
} 
+0

これは私の質問にどのように関連していますか? defaultSharedPreferences – PKlumpp

+0

はデフォルトの格納されたvauleを上書きしないので、使用したくないですか?あなたが必要とするものを理解すれば? putBoolean( "com.blabla.someapp.testBoolean1"、true)とputBoolean( "..... .testBoolean2、false)を使用するたびに、testBoolean1がtrue、falseがtestBoolean2に格納されます。 –

関連する問題