2016-07-14 4 views
1

共有設定を静的にアクセスして過度のコードを避けたいのですが、共有設定を読み込んだときに静的メソッド "setSyncDBIsNeeded()"が保存されていないように見えます。なぜ静的共有設定が保存されないのですか?

MyApplicationをコード:

public class MyApplication extends Application { 
    private static MyApplication instance; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     instance = this; 
     RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this) 
       .name(Realm.DEFAULT_REALM_NAME) 
       .schemaVersion(0) 
       .deleteRealmIfMigrationNeeded() 
       .build(); 
     Realm.setDefaultConfiguration(realmConfiguration); 

    } 

    public static Context getContext() { 
     return instance.getApplicationContext(); 
    } 
} 

私の好みの活動:

PreferenceController.setSyncDBIsNeeded(true); 
PreferenceController.getSyncDBIsNeeded(); 

とそのログに印刷された:

07-14 14:24:04.665 27658-27658/com.example.myproject D/PREFCON: Setted DBSyncNeeded : true 
07-14 14:24:04.665 27658-27658/com.example.myproject D/PREFCON: DBSyncNeeded: false 
私は別のクラスで次に

public class PreferenceController { 
    SharedPreferences sharedPreferences; 
    private static String project = "com.example.myproject"; 

    public PreferenceController() { 
     sharedPreferences = MyApplication.getContext().getSharedPreferences(project, Context.MODE_PRIVATE); 
    } 

    public PreferenceController(Context context) { 
     sharedPreferences = context.getSharedPreferences(project, Context.MODE_PRIVATE); 
    } 

    /* getters and setters */ 

    // Static methods 

    public static void setSyncDBIsNeeded(boolean value) { 
     Log.d("PREFCON","Setted DBSyncNeeded : "+value); 
     getSharedPrefferences().edit().putBoolean("DBSyncNeeded", value); 
    } 

    public static boolean getSyncDBIsNeeded() { 
     Log.d("PREFCON","DBSyncNeeded: "+getSharedPrefferences().getBoolean("DBSyncNeeded", false)); 
     return getSharedPrefferences().getBoolean("DBSyncNeeded", false); 
    } 

    private static SharedPreferences getSharedPrefferences() { 
     return MyApplication.getContext().getSharedPreferences(project, Context.MODE_PRIVATE); 
    } 
} 

+3

値を設定した後に 'commit()'を呼び出すことを忘れてしまいます。 – Rashin

+1

"commit()"が呼び出されました) – MikeOx

答えて

2

これを試してみてください:

SharedPreferences.Editor editor = getSharedPrefferences().edit(); 
editor.putBoolean("DBSyncNeeded", value); 
editor.commit(); 

あなたはSharedPreferencesが実際にそれを保存するので、SharedPreferencesに加えられた変更を更新するために覚えておく必要があります。

はあなたのコードに挿入:

public static void setSyncDBIsNeeded(boolean value) { 
    Log.d("PREFCON","Setted DBSyncNeeded : "+value); 
    SharedPreferences.Editor editor = getSharedPrefferences().edit(); 
    editor.putBoolean("DBSyncNeeded", value); 
    boolean completed = editor.commit(); 
    Log.e("PREFCON", "Updating SharedPreferences was " + completed + "!"; 
} 

それが成功したかどうかを簡単に知ることができeditor.commitに設定するブール値を追加することによって。 documentationによると、commit()メソッドは、完了したかどうかに基づいてブール値を返します。 Trueは編集が成功したことを意味し、falseは何かが間違っていたことを意味します。

+0

答えを広げるためのあなたの努力は高く評価されていますが、私はこれを知りませんでした。共有の設定にアクセスする方法:) – MikeOx

+0

それはうまく聞いてうれしい:) – Zoe

2

実際にリクエストを実行するには、commitまたはapplyを使用する必要があります。

は、あなたの好みをコミットし、それが編集され SharedPreferencesオブジェクトにこのEditorから戻って変更します。これにより、現在 SharedPreferencesにあるものを置き換えて、要求された変更がアトミックに で実行されます。

public static void setSyncDBIsNeeded(boolean value) { 
    Log.d("PREFCON","Setted DBSyncNeeded : "+value); 
    getSharedPrefferences().edit().putBoolean("DBSyncNeeded", value).apply(); 
} 
関連する問題