【问题标题】:How to read/write a boolean preference如何读/写布尔首选项
【发布时间】:2012-05-09 07:48:50
【问题描述】:

编辑:这段代码确实有效。我在使用它的代码中有问题。无论如何都要留下它,以防有人发现它有用。

我有一个类,它有两种方法来写入和读取布尔持久首选项。但是,如果我写入一个新值然后尝试读取它,我仍然会得到旧值。只有当我杀死应用程序并重新启动它时,我才会获得新的价值。知道问题出在哪里吗?

 Context mContext;

 ....
 public void writeFlag(boolean flag) {
        SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(mContext);
        Editor editor = sharedPreferences.edit();
        editor.putBoolean("mykey", flag);
        editor.commit();
}

public boolean readFlag() {
        SharedPreferences sharedPreferences =
               PreferenceManager.getDefaultSharedPreferences(mContext);
        return sharedPreferences.getBoolean("mykey", false);
}

【问题讨论】:

  • 当你杀死应用程序或清除它的数据时,所有的prefrence值都设置为默认值

标签: android preferences sharedpreferences


【解决方案1】:
public static boolean getBooleanFromSP(String key) {
// TODO Auto-generated method stub
    SharedPreferences preferences = getApplicationContext().getSharedPreferences(" SHARED_PREFERENCES_NAME ", android.content.Context.MODE_PRIVATE);
    return preferences.getBoolean(key, false);
}//getPWDFromSP()


public static void saveBooleanInSP(String key, boolean value){
    SharedPreferences preferences = getApplicationContext().getSharedPreferences(" SHARED_PREFERENCES_NAME ", android.content.Context.MODE_PRIVATE);
    SharedPreferences.Editor editor =      preferences.edit();
    editor.putBoolean(key, value);
    editor.commit();
}//savePWDInSP()

【讨论】:

  • 使用apply代替commit在后台写入数据
【解决方案2】:
public static boolean getBooleanFromSP(String key) {
// TODO Auto-generated method stub
SharedPreferences preferences = 
getApplicationContext().getSharedPreferences(" SHARED_PREFERENCES_NAME ", 
  android.content.Context.MODE_PRIVATE);
 return preferences.getBoolean(key, false);
  }//getPWDFromSP()


 public static void saveBooleanInSP(String key, boolean value){
SharedPreferences preferences = getApplicationContext().getSharedPreferences(" SHARED_PREFERENCES_NAME ", android.content.Context.MODE_PRIVATE);
SharedPreferences.Editor editor =      preferences.edit();
editor.putBoolean(key, value);
editor.commit();
 }//savePWDInSP()

【讨论】:

    【解决方案3】:
    public class SharePref {
    private static final String TAG = SharePref.class.getSimpleName();
    private static SharePref mThis;
    private Context mContext;
    private SharedPreferences mPreference;
    
    private SharePref() {
    
    }
    
    public static void init(Context context) {
        if (mThis == null) {
            mThis = new SharePref();
            mThis.setData(context);
        }
    }
    
    private void setData(Context context) {
        mThis.mContext = context;
        mPreference = mContext.getSharedPreferences(TAG, Context.MODE_PRIVATE);
    }
    
    public static SharePref getInstance() {
        return mThis;
    }
    
    public void writeString(String tag, String data) {
        SharedPreferences.Editor editor = mPreference.edit();
        editor.putString(tag, data).apply();
    }
    
    public String readString(String tag) {
        if (mPreference == null)
            mPreference = mContext.getSharedPreferences(TAG, Context.MODE_PRIVATE);
        return mPreference.getString(tag, null);
    }
    
    public void writeBoolean(String tag, boolean data) {
        SharedPreferences.Editor editor = mPreference.edit();
        editor.putBoolean(tag, data).apply();
    }
    
    public boolean readBoolean(String tag) {
        return mPreference.getBoolean(tag, false);
    }
    
    
    public void clear(String tag) {
        mPreference.edit().remove(tag).apply();
    }
    
    
    }                                                                              
    

    //在活动中

     SharePref.init(this);       
     SharePref.getInstance().writeString("key","value");                                                                                    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多