0

數據得到我使用一些代碼在活動的onActivityResult方法來更新數據:按鈕不更新從SharedPreference

   //save state 
       editorUserInfoSharedPreferences.putString("userType", productId); 
       editorUserInfoSharedPreferences.putInt("paymentStatus", 1); 
       editorUserInfoSharedPreferences.commit(); 
       editorUserInfoSharedPreferences.apply(); 

       int paymentStatus = userInfoSharedPreferences.getInt("paymentStatus", 0); 
       String userType = userInfoSharedPreferences.getString("userType", ""); 
       Log.e(TAG, "paymentStatus 1700: "+ paymentStatus); 
       Log.e(TAG, "userType 1700: "+ userType); 

在日誌中的數據是正確的。但在那之後,我打一個按鈕,並從sharePreference獲取數據:

int paymentStatus = userInfoSharedPreferences.getInt("paymentStatus", 0); 
       String userType = 
userInfoSharedPreferences.getString("userType", ""); 
       Log.e(TAG, "paymentStatus 1532: "+ paymentStatus); 
       Log.e(TAG, "userType 1530: "+ userType); 

中的數據記錄是舊數據。 這是我的日誌:

E/MAINACTIVITY: paymentStatus 1700: 1 
E/MAINACTIVITY: userType 1700: monthly_0 
.... 
E/MAINACTIVITY: paymentStatus 1532: 0 
E/MAINACTIVITY: userType 1530: 0 

我該如何解決這個問題?提前感謝你!

+1

您應該使用提交或應用 –

+0

如果我同時使用它們,是否有問題? –

+1

是的,其中一個是同步的,另一個是異步的。另外android建議使用apply()(同步),如果你正在使用多線程,並且你正在使用main.thread,你可以使用commit。 –

回答

0

您可以將代碼粘貼到init:editorUserInfoSharedPreferences & userInfoSharedPreferences。我能猜到的一件事是使用2個不同的共享首選對象。

+0

userInfoSharedPreferences = getSharedPreferences(CURRENT_USER_INFO_FILE,MODE_PRIVATE); editorUserInfoSharedPreferences = userInfoSharedPreferences.edit(); –

+0

這是這個! –

-1

在對editorUserInfoSharedPreferences執行提交後,在onActivityResult中初始化您的userInfoSharedPreferences。

因爲您正在使用您的sharedpreference的舊對象,所以您正在獲取舊值。