2016-12-16 58 views
-1

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

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(); 
+0

删除_editor.apply(); _。您已经调用_editor.commit(); _ – Piyush

+0

SharedPreferences的名称不是一个。所以不能清除碎片偏好。请先检查文件名。 – Mick

+0

我已更改名称并删除了editor.apply(); –

回答

0

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

在你的第一个活动,您正在使用:

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

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

尝试从文档

阅读这些 http://developer.android.com/reference/android/app/Activity.html

还检索SharedPreferences对象访问是 私人这项活动的偏好。通过传入此活动的 类名称作为首选项名称,这只是简单地调用底层 getSharedPreferences(String,int)方法。

0

你好,如果你只想从一个活动到另一个或一个片段到其它传递价值比我建议你使用意向传递数据

看看下面这个例子怎么传 - http://startandroid.ru/en/lessons/241-lesson-28-extras-passing-data-using-intent.html

而且 - https://stackoverflow.com/a/30166602/4741746

sharedPreferences时所使用的所有活动数据,该数据permanatly存储在应用程序,你也c用于一个明确的数据

删除给出从shearedPrefrance

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(); 
    } 
} 

为什么你的代码不工作是你必须passs Context.MODE_PRIVATE insted的MODE_PRIVATE确定两者应该具有相同的值

将此代码放在两个类

SharedPreferences app_preferences = PreferenceManager 
       .getDefaultSharedPreferences(context); 
+0

仍然无效 –

+0

SharedPreferences app_preferences = PreferenceManager 。getDefaultSharedPreferences(上下文);用这个来getShearedPrefrance在这两个类 –

+0

问题依然 –