无法清除碎片首选项

时间:2016-12-16 10:02:42

标签: android

这是在我的主要活动类中,我可以通过共享首选项传递和检索我的其他类中的数据,但我无法清除其他类中的共享首选项。还告诉我如何检查我的共享首选项是否已被清除。

SharedPreferences sharedPreferences;
public static final String MyPREFERENCES = "MyPrefs" ;
public static final String Name = "userKey";
public static final String Pass = "passKey";

 sharedPreferences=getApplicationContext().getSharedPreferences(MyPREFERENCES,MODE_PRIVATE);

                    SharedPreferences.Editor editor = sharedPreferences.edit();
                    editor.putString(Name,userName);
                    editor.putString(Pass,password);
                    editor.commit();

这是我的另一个班级

SharedPreferences sharedPreferences;
    sharedPreferences=getApplicationContext().getSharedPreferences(SignUPActivity.MyPREFERENCES, Context.MODE_PRIVATE);

 SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.clear();
            editor.apply();
            editor.commit();

2 个答案:

答案 0 :(得分:0)

可能的原因是您没有使用相同的偏好。

在您使用的第一个活动中:

sharedPreferences = getApplicationContext()
                    .getSharedPreferences(MyPREFERENCES,MODE_PRIVATE);

在其他活动中你也应该使用它。

尝试阅读这些内容 http://developer.android.com/reference/android/app/Activity.html

也来自文档

  

检索SharedPreferences对象以访问其中的首选项   私人参加此活动。这只是调用底层证券   通过传入此活动的getSharedPreferences(String,int)方法   类名作为首选项名称。

答案 1 :(得分:0)

您好,如果您只想将值从一个Activity传递到另一个或一个片段,而不是建议您使用 INTENT 传递数据

请看这个示例如何传递 - http://startandroid.ru/en/lessons/241-lesson-28-extras-passing-data-using-intent.html

另外 - https://stackoverflow.com/a/30166602/4741746

sharedPreferences 用于在应用程序中永久存储的所有活动的数据时,您也可以清除数据

从shearedPrefrance

中删除给定的String
public static void removeFromSharedPreferences(Context mContext, String key) {
    if (mContext != null) {
        SharedPreferences mSharedPreferences = mContext.getSharedPreferences(Constants.SHARED_PREFERENCES_NAME, 0);
        if (mSharedPreferences != null)
            mSharedPreferences.edit().remove(key).commit();
    }
}

从SharedPrefrance

中删除所有值
public static void removeSharedPreferences(Context mContext) {
    if (mContext != null) {
       SharedPreferences preferences = mContext.getSharedPreferences("PREFERENCE", 0);
        SharedPreferences.Editor editor = preferences.edit();
        editor.clear(); 
        editor.commit();
    }
}

为什么你的代码不起作用你需要传递 Context.MODE_PRIVATE insted MODE_PRIVATE jsut确认两者应该具有相同的值

将此代码放在两个类

 SharedPreferences app_preferences = PreferenceManager
                .getDefaultSharedPreferences(context);