2017-10-17 4 views
-4

ブール値を共有プリファレンスに保存しようとしていますが、ログに記録するとfalse値。以下のコードを見てください。また、このコードはフラグメント内にあることに注意してください。私のブール値は、共有プリファレンスにtrueとして保存されると期待していますが、常にfalseとして保存します。

SharedPreferences AppPreferences = getActivity().getSharedPreferences("myPrefs", Activity.MODE_PRIVATE); 
     boolean propertyManagerLoggedIn = AppPreferences.getBoolean(PROPERTYMANAGER_LOGGEDIN, false); 

     if(!propertyManagerLoggedIn) 
     { 
     SharedPreferences.Editor editor = AppPreferences.edit(); 
     transitionInterface.showDashboardIcons(); 
     AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 
     editor.commit(); 
     //boolean vlaue = prefs.getbooleanflag(context, false); 
     Log.d("tag",""+propertyManagerLoggedIn); 

     } 
    else 
     { 

     Log.d("tag",""+propertyManagerLoggedIn); 
     } 

以下はあなたに戻されている私のAppPreferencesクラス

public final static String PROPERTYMANAGER_LOGGEDIN = "PROPERTYMANAGER_LOGGEDIN"; 

    public static boolean propertyManagerLoggedn(Context context) 
    { 
     TinyDB settings = new TinyDB(context); 
     return settings.getBoolean(AppPreferences.PROPERTYMANAGER_LOGGEDIN); 
    } 

答えて

2

新しいEditoredit()を呼び出すたびからのコードの関連行です。したがってドキュメント

にお好みのデータに 変更を加えると、アトミックバックSharedPreferencesオブジェクトへ それらの変更をコミットすることができ、それを通して、これらの環境のための新しいエディタを作成します。

ので、あなたはどちらかを行うことができます

AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true).commit(); 

または

editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 
editor.commit(); 

が、他のインスタンス上のputBooleancommitを呼び出すと、おそらくあなたがコミット呼び出している

0

を助けにはなりません別のインスタンスで。 基本的にAppPreferences.edit()は新しいインスタンスを提供します。

AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 

これは、ブール値を入力する別のインスタンスです。

作成した同じインスタンスを使用します。 コードは次のようになります。

SharedPreferences.Editor editor = AppPreferences.edit(); 
     transitionInterface.showDashboardIcons(); 
     editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 
     editor.commit(); 
+0

ありがとうございました。私はまた、私がアプリの設定でそれを宣言する方法が間違っていると思われる。それを宣言する正しい方法は何ですか?私はそれにアクセスできます – Zidane

関連する問題