android - Activity 关闭时共享首选项数据未清除

标签 android sharedpreferences

在我的应用程序中,我使用了地点选择器。地点选择器提供的数据使用共享首选项发送到 3 个不同的 Activity 。并在 TextView 中显示此数据。问题是当我关闭 Activity 并再次打开该 Activity 时,我的数据仍然可见在 TextView 中。甚至当我在 onDestroy() 中清除它时。

这是我从地点选择器发送数据的代码:

            SharedPreferences settings = getSharedPreferences("city_address", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = settings.edit();
            editor.putString("city_address", (String) cityAddress);
            editor.putString("city_name", (String) city);
            editor.commit();

            Intent intent = new Intent(this, CleanlinessActivity.class);
            startActivity(intent);

在 CleaninessActivity 的 onCreate() 中使用此代码设置数据

     SharedPreferences settings = getSharedPreferences("city_address", Context.MODE_PRIVATE);
    String n = settings.getString("city_name", "Enter Location");
    String a = settings.getString("city_address", "");
    cityname.setText(n);
    cetlocation.setText(a);

我在 CleaninessActivity 中使用此代码清除了数据

     @Override
protected void onDestroy() {
    super.onDestroy();
    SharedPreferences settings = getSharedPreferences("city_address", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = settings.edit();
    editor.remove("city_address");
    editor.clear().commit();
}

最佳答案

关闭应用程序意味着只需单击主页按钮,然后 onDestroy() 就不会被调用,您可以回顾一下 Android 生命周期 here 如果您所做的只是单击主页按钮,请考虑将代码移至 onStop(),否则您需要在 remove(. ..) android 文档指出“在编辑器中标记应删除首选项值,一旦调用 commit(),这将在实际首选项中完成。”

关于android - Activity 关闭时共享首选项数据未清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49413879/

相关文章:

java.lang.String 无法转换为 com.example.expandablelistview.NewsItem

Android SharedPreferences IOException 错误

Android - 首选项 - ClassCastException

java - 偷偷摸摸的 Java 类型转换

android - 我如何进行文本查询并在 Android 中获取位置?

android - 保留 AlertDialog 选中的选项

android - 如何在 Android 中使用 SharedPreferences 存储 boolean 值?

java - 安卓耳机插孔

android - Gradle 文件导致应用意外崩溃 : Error inflating class androidx. constraintlayout.ConstraintLayout

android - Jenkins:无法解析com.android.tools.build:gradle:2.2.2