2017-10-17 59 views
-4

我想保存一個布爾值到共享首選項的值爲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每次調用edit()Editor時間類

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

相關線路被退還給您。因此在文檔

創建這些首選項,通過它可以使 修改數據的偏好和原子提交 這些更改回SharedPreferences對象的一個​​新的編輯器。

,所以你可以做

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

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

但調用上的其他putBoolean上的一個實例和commit不會可能幫助

0

你調用commit在不同的實例上。 基本上AppPreferences.edit()會給你一個新的實例。

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

這是另一個您正在布爾值的實例。

使用您創建的相同實例。 您的代碼應該如下所示:

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

謝謝,讓我試試。我也懷疑我在應用程序首選項中聲明的方式是錯誤的。什麼是正確的方式來聲明它,以便我可以訪問它 – Zidane

相關問題