【问题标题】:delete all sharedPreferences for my app when user signs out用户注销时删除我的应用程序的所有 sharedPreferences
【发布时间】:2013-08-23 07:30:02
【问题描述】:

我有一个 android 应用程序,其中包含许多活动,以及一些创建的特定首选项文件。当用户退出我的应用程序时,我想绝对删除所有共享首选项。请理解我不能使用context.getSharedPreferences("A_PREFS_FILE", 0).edit().clear().commit(),因为那只会清除一个特定文件。我想清除与我的应用程序关联的所有首选项文件。有没有办法做到这一点?

【问题讨论】:

  • clear() 是一种非静态方法,因此 SharedPreferences.Editor.clear() 不起作用。那里的所有其他示例都在做我特别说过我不想做的事情。此外,以下将是一个空指针:Editor defaultPrefsPut; defaultPrefsPut.clear(); defaultPrefsPut.commit();
  • 随后清除每个首选项文件有什么问题,即在循环中?

标签: android sharedpreferences


【解决方案1】:

这行得通

public static void deleteAllDataInSharedPreference(Context context){
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = preferences.edit();
    editor.clear();
    editor.commit();
    context = null;
}

deleteAllDataInSharedPreference(getApplicationContext());

【讨论】:

    【解决方案2】:

    SharedPreferences 目录路径:Environment.getDataDirectory() + "/data/" + ActivateAccountActivity.this.getPackageName() + "/shared_prefs"

    使用“for”循环删除所有文件,如下所示:

    File sprefs_directory = new File(Environment.getDataDirectory() + "/data/" + context.getPackageName() + "/shared_prefs");
    File[] files = filesirectory.listFiles();
    for(File file : files) {
      file.delete();
    }
    

    【讨论】:

      【解决方案3】:

      首先你必须clear 然后下一个电话commit 试试看:

      SharedPreference.Editor pref = context.getSharedPreferences("A_PREFS_FILE", 0).edit();
      pref.clear();
      pref.commit();
      

      【讨论】:

      • 什么是 A_PREFS_FILE
      • 问题要求A_PREFS_FILE 所以,你可以写下你的偏好名称。
      【解决方案4】:

      使用下面的代码删除偏好键:

      prefs.edit().remove("YOURTAG1").commit();
      prefs.edit().remove("YOURTAG2").commit();
      

      【讨论】:

        【解决方案5】:

        通过这种方式,您可以删除所有文件。 通过 clear() 它将擦除数据文件仍然存在..

        File sharedPreferenceFile = new File("/data/data/"+ getPackageName()+ "/shared_prefs/");
            File[] listFiles = sharedPreferenceFile.listFiles();
            for (File file : listFiles) {
                file.delete();
            }
        

        这里将返回所有文件列表,然后您可以轻松删除..

        【讨论】:

        • 这绝对是删除所有共享首选项文件的正确方法。但考虑使用context.getFilesDir().getPath() 而不是硬编码路径"/data/data/"
        • @YoracoGonzales context.getFilesDir().getPath() 给了我/data/user/0/{applicationId}/files 不等于/data/data/
        • context.filesDir.parentFile.absolutePath + File.separator + "shared_prefs" 确实有效。但谁知道它可能不适用于三星¯_(ツ)_/¯
        【解决方案6】:

        只需输入以下代码,它对我来说非常适合.....

        getApplicationContext().getSharedPreferences("CREDENTIALS", 0).edit().clear().commit();
        

        【讨论】:

        • 考虑使用 apply() 代替; commit 立即将其数据写入持久存储,而 apply 将在后台处理它。 getApplicationContext().getSharedPreferences("PREF_NAME", 0).edit().clear().apply();
        【解决方案7】:

        为什么不使用 SharedPreference 来跟踪所有关联文件;然后,在 onPause 或 onStop 中,将该值解析为 SharedPreferences.Editor.clear().commit() 每个...然后删除最后一个?

        【讨论】:

          猜你喜欢
          • 2016-05-03
          • 2011-05-15
          • 2016-08-07
          • 1970-01-01
          • 1970-01-01
          • 2015-12-13
          • 2018-07-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多