SharedPreferences always get default value in my existing app but when created new app its ok

后端 未结 11 951
眼角桃花
眼角桃花 2020-12-16 13:18

SharedPreferences doesn\'t work correct in one existing apps. I tried many different ways but still not working. Always get default values app start again.

  • It\
11条回答
  •  不知归路
    2020-12-16 14:00

    I used the below code pattern in one of my app and I always get the latest value stored in SharedPreferences. Below is the edited version for your problem:

    public class AppPreference
            implements
            OnSharedPreferenceChangeListener {
    
        private static final String USER         = "User";
        private static final String DEFAULT_USER = "Default_User";
    
        private Context mContext;
        private String mDefaultUser;
    
        private SharedPreferences mPref;
        private static AppPreference mInstance;
    
        /**
         * hide it.
         */
        private AppPreference(Context context) {
            mContext = context;
            mPref = PreferenceManager.getDefaultSharedPreferences(context);
            mPref.registerOnSharedPreferenceChangeListener(this);
            reloadPreferences();
        }
    
        /**
         * @param context
         * @return single instance of shared preferences.
         */
        public static AppPreference getInstance(Context context) {
            return mInstance == null ?
                    (mInstance = new AppPreference(context)) :
                    mInstance;
        }
    
        /**
         * @return value of default user
         */
        public String getDefaultUser() {
            return mDefaultUser;
        }
    
        /**
         * Set value for default user
         */
        public void setDefaultUser(String user) {
            mDefaultUser = user;
            mPref.edit().putString(USER, mDefaultUser).apply();
        }
    
        /**
         * Reloads all values if preference values are changed.
         */
        private void reloadPreferences() {
            mDefaultUser = mPref.getString(USER, DEFAULT_USER);
            // reload all your preferences value here
        }
    
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            reloadPreferences();
        }
    }
    

    You can set the value as below in your activity:

    AppPreference.getInstance(this).setDefaultUser("user_value");
    

    To get the updated value for saved user, use below code:

    String user = AppPreference.getInstance(this).getDefaultUser();
    

    Hope this solution will fix the problem you are facing.

提交回复
热议问题