2017-02-10 5 views
0

私は奇妙な問題があります。 1つのアクティビティでチェックボックスフィールドのリストがある場合、チェックボックスの状態は共有されているかどうかによって異なりますが、時には時にはうまくいかない場合もあります(チェックボックスをチェックして前のアクティビティに戻って、 sharedPrefrencesの値は変更されません)。私はそれが起こったと思った、私はスレッドに節約ロジックを置くが、同じ問題を抱えたので、あまりにも速く活動を変更しています。sharedPreferencesのbooleanが必ずしもcorreclyを保存しない場合

public final static String PREFERENCES_NAME = "USER_PREFERENCES"; 
     public final static String PLAY_REQUIRED = "PLAY_REQUIRED"; 
      sharedPreferences = getSharedPreferences(PREFERENCES_NAME, Activity.MODE_PRIVATE); 
     recordCheckBox=(CheckBox)findViewById(R.id.recordRequiredCheckBox); 
     recordCheckBox.setChecked(sharedPreferences.getBoolean(PLAY_REQUIRED,true)); 
     findViewById(R.id.playRequiredItem).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
SharedPreferences.Editor preferencesEditor = sharedPreferences.edit(); 
       if(recordCheckBox.isChecked()) { 
        recordCheckBox.setChecked(false); 
        preferencesEditor.putBoolean(PLAY_REQUIRED, false).apply(); 
        preferencesEditor.commit(); 
        Log.i("kamil","AfterSetFalseCheckBox :: "+ sharedPreferences.getBoolean(PLAY_REQUIRED,true)); 
       } 
       else { 
        recordCheckBox.setChecked(true); 
        preferencesEditor.putBoolean(PLAY_REQUIRED, true).apply(); 
        preferencesEditor.commit(); 
        Log.i("kamil","AfterSetTrueCheckBox :: "+ sharedPreferences.getBoolean(PLAY_REQUIRED,true)); 
       } 
      } 
     }); 
+0

削除:値を取得するには

PreferenceHelper.putBoolean(getApplicationContext(),"key",value); 

を。 apply()。 apply()は、SPの非同期保存に使用されます。 –

+0

AsyncTaskを削除し、直接PreferencesEditor.putBooleanを使用します(PLAY_REQUIRED、check).apply(); preferencesEditor.commit(); –

+0

'sharedPreferences = getApplicationContext()。getSharedPreferences(PREFERENCES_NAME、Activity.MODE_PRIVATE);' –

答えて

0

あなたが設定するための方法以下で使用してブール値を取得することができます:ここでは

は、私が試したいくつかのコードです。優先して取得するブール値の

好み/

public void setBooleanValue(String key, boolean value, Context context) { 

    SharedPreferences preferences = context.getSharedPreferences(
      context.getPackageName(), Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putBoolean(key, value); 
    editor.commit(); 
} 

/のSetブール値の

//

public boolean getBooleanValue(String key, Context context) { 

    SharedPreferences preferences = context.getSharedPreferences(
      context.getPackageName(), Context.MODE_PRIVATE); 
    boolean value = preferences.getBoolean(key, false); 
    return value; 
} 
+0

それは彼の問題ではない質問を理解しようとしています。 @Expiredmindもそれをしました。 –

1

私は、これはいつでもあなたのために起こっていると思います1つのsharedprefrencesに挿入された値よりもsharedpreferenceに値を入れ、あなたはsharedpreferenceからの値を別のsharedpreferenceから取得しています。だから、私はsharedpreferenceのための適切なヘルパークラスを作成し、いつでもそれを使用することをお勧めします。ここで

はその一例です:

public class PreferenceHelper { 

    public static SharedPreferences AppPreference; 

    // Preference name for app. 
    public static final String APP_PREFERENCE_NAME = "app_preference_name"; 

    /** 
    * Set boolean value to shared-preference. 
    * 
    * @param key Key for store boolean value to shared-preference. 
    * @param value Boolean value to be stored in shared-preference for given key. 
    */ 
    public static void putBoolean(Context context,String key, boolean value) { 
     AppPreference = context 
       .getSharedPreferences(APP_PREFERENCE_NAME, Context.MODE_PRIVATE); 
     Editor editor = AppPreference.edit(); 
     editor.putBoolean(key, value); 
     editor.commit(); 
    } 

    /** 
    * Get boolean value from shared-preference. 
    * 
    * @param key   Key for getting boolean value from shared-preference. 
    * @param defaultValue Default boolean value that is returned if given key is not found in 
    *      preference. 
    * @return string  Boolean value from shared-preference for given key. 
    */ 
    public static boolean getBoolean(Context context,String key, boolean defaultValue) { 
     AppPreference = context 
       .getSharedPreferences(APP_PREFERENCE_NAME, Context.MODE_PRIVATE); 
     boolean string = AppPreference.getBoolean(key, defaultValue); 
     return string; 
    } 
} 

、それが好きで使用します。

を値に設定するには:

Boolean boolean = PreferenceHelper.getBoolean(getApplicationContext(),"key",defalut-value); 
関連する問題