【问题标题】:android - Shared Preference not updating after closing appandroid - 关闭应用程序后共享首选项不更新
【发布时间】:2016-02-20 06:02:48
【问题描述】:

我正在使用以下代码在onStop() 中添加首选项并在onActivityCreated() 中检索。一切正常,但在杀死应用程序后,sharedpreference 没有更新其值,并且在安装应用程序后第一次插入的值始终保持不变.

代码:

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    SharedPreferences appdata = PreferenceManager.getDefaultSharedPreferences(this.getActivity());

    etA.setText(appdata.getString("A", ""));
    etB.setText(appdata.getString("B", ""));
}

@Override
public void onStop() {
    super.onStop();

    SharedPreferences appdata = PreferenceManager.getDefaultSharedPreferences(this.getActivity());
    SharedPreferences.Editor editor = appdata.edit();
    editor.putString("A", etA.getText().toString());
    editor.putString("B", etB.getText().toString());
    editor.commit();
}

【问题讨论】:

  • 你是如何杀死你的应用程序的。请在停止中添加一条日志消息,并检查 logcat 是否在您杀死您的应用程序时被调用。还要在 onActivityCreated 中输入一个日志,并检查它是否在您重新启动应用时被调用。
  • 您要卸载应用吗?
  • 而不是onstop 将此代码写入onpause()
  • SharedPreferences.Editor editor = appdata.edit(); editor.clear(); editor.putString("A", etA.getText().toString()); editor.putString("B", etB.getText().toString()); editor.commit();

标签: android sharedpreferences


【解决方案1】:

创建一个包含片段的 Activity:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.content_layout, new ContentFragment())
                .commit();
    }

    public static class ContentFragment extends Fragment {

        EditText etA, etB;

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.main_fragment, container, false);
            etA = (EditText) view.findViewById(R.id.et_a);
            etB = (EditText) view.findViewById(R.id.et_b);
            return view;
        }

        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            SharedPreferences appdata = PreferenceManager.getDefaultSharedPreferences(getActivity());
            etA.setText(appdata.getString("A", ""));
            etB.setText(appdata.getString("B", ""));
        }

        @Override
        public void onStop() {
            super.onStop();
            SharedPreferences appdata = PreferenceManager.getDefaultSharedPreferences(getActivity());
            SharedPreferences.Editor editor = appdata.edit();
            editor.putString("A", etA.getText().toString());
            editor.putString("B", etB.getText().toString());
            editor.commit();
        }
    }
}

片段布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et_a"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/et_b"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

我测试了这段代码,它对我来说很完美。请检查并告诉我们您做错了什么?

【讨论】:

  • 很好,它解决了。但是仍然无法理解为什么您必须执行 editor.clear() 才能使其正常工作。我发布的代码对我来说可以正常工作,而无需执行 editor.clear()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多