活动关闭时,不会清除共享首选项数据

时间:2018-03-21 18:18:48

标签: android sharedpreferences

在我的应用程序中,我使用了地方选择器。并且使用共享首选项将选择器提供的数据发送到3个不同的活动。并且在TextView.problem中显示此数据是当我关闭活动并再次打开该活动时我的数据仍然可见在TextView.even中,当我在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);

在CleanlinessActivity的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);

我使用CleanlinessActivity中的代码

清除了数据
     @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();
}

2 个答案:

答案 0 :(得分:0)

通过关闭应用程序,您只需单击主页按钮,然后永远不会调用onDestroy(),您可以重新获得Android生命周期here 如果你正在做的只是单击主页按钮,那么考虑将代码移动到onStop(),否则你需要commit()跟随remove(...) android文档状态"标记在编辑器应该删除一个首选项值,这将在调用commit()后在实际首选项中完成。"

答案 1 :(得分:0)

您有一个名为city_address的SharedPreferences实例,该实例有两个字段或(如果我们调用它,则为列),但在onDestroy()内,您试图仅清除一个名为city_address的字段,另一个字段city_name字段保持不变,如果要完全删除city_address的内容,则SharedPreferences使用editor.clear().commit();   。or``editor.clear()应用();`