应用重启时 Sharedpreferences 不保存数据
Sharedpreferences not saving data when app restart
我正在尝试在我的应用程序中制作 "add favorites" 按钮。我可以使用 sharedpreferences
正确发送和获取值,但是当我重新启动应用程序时,收藏夹再次为空。我想我需要覆盖 OnPause
方法,但我无法正确应用。我需要帮助,提前致谢。
正在播放无线电片段
public static int incrementedValue = 0;
add_favorites_button= (Button) view.findViewById(R.id.add_favorites_button);
add_favorites_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences settings = getActivity().getSharedPreferences("PREFS", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("radio_link"+ incrementedValue, radio_play_link);
editor.putString("radio_name" + incrementedValue, radio_name);
editor.putString("listener_number" + incrementedValue, listener_number);
//editor.clear();
editor.commit();
incrementedValue++;
}
});
最喜欢的片段
final List<String> radio_name_list = new ArrayList<>();
final List<String> radio_link_list = new ArrayList<>();
final List<String> listener_numbers = new ArrayList<>();
for (int i=0; i<PlayRadioFragment.incrementedValue; i++) {
SharedPreferences settings = getActivity().getSharedPreferences("PREFS",0);
radio_name_list.add(settings.getString("radio_name" +i, ""));
radio_link_list.add(settings.getString("radio_link" +i, ""));
listener_numbers.add(settings.getString("listener_number" +i, ""));
}
...
然后我在列表视图中显示它们
...
for (int i=0; i<PlayRadioFragment.incrementedValue; i++)
重新启动应用程序(或 Fragment)后,此 incrementedValue
将返回到它初始化时的状态,可能为 0,因此您不会从 SharedPreferences
加载任何内容(不输入for-loop)。
试试
for (int i=0; i<Integer.MAX_VALUE; i++) {
String s = settings.getString("radio_name" +i, "")
if (TextUtils.isEmpty(s))
break;
} else {
radio_name_list.add(s);
}
您可能还想避免在应用程序重启后覆盖旧的收藏夹,因此您必须在加载收藏夹后设置 incrementedValue
,例如
incrementedValue = radio_name_list.size();
发生这种情况是因为在重新启动应用程序时,名为 incrementedValue 的变量的值再次变为 0,并且在 for 循环条件语句中未完全填充,这就是循环未按预期执行的原因。要解决此问题,您可以再做一件事,您还需要将 incrementedValue 的值保存在共享首选项中,并在 for 循环测试语句中从共享首选项中获取更新的值。希望对你有帮助
我正在尝试在我的应用程序中制作 "add favorites" 按钮。我可以使用 sharedpreferences
正确发送和获取值,但是当我重新启动应用程序时,收藏夹再次为空。我想我需要覆盖 OnPause
方法,但我无法正确应用。我需要帮助,提前致谢。
正在播放无线电片段
public static int incrementedValue = 0;
add_favorites_button= (Button) view.findViewById(R.id.add_favorites_button);
add_favorites_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences settings = getActivity().getSharedPreferences("PREFS", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("radio_link"+ incrementedValue, radio_play_link);
editor.putString("radio_name" + incrementedValue, radio_name);
editor.putString("listener_number" + incrementedValue, listener_number);
//editor.clear();
editor.commit();
incrementedValue++;
}
});
最喜欢的片段
final List<String> radio_name_list = new ArrayList<>();
final List<String> radio_link_list = new ArrayList<>();
final List<String> listener_numbers = new ArrayList<>();
for (int i=0; i<PlayRadioFragment.incrementedValue; i++) {
SharedPreferences settings = getActivity().getSharedPreferences("PREFS",0);
radio_name_list.add(settings.getString("radio_name" +i, ""));
radio_link_list.add(settings.getString("radio_link" +i, ""));
listener_numbers.add(settings.getString("listener_number" +i, ""));
}
... 然后我在列表视图中显示它们 ...
for (int i=0; i<PlayRadioFragment.incrementedValue; i++)
重新启动应用程序(或 Fragment)后,此 incrementedValue
将返回到它初始化时的状态,可能为 0,因此您不会从 SharedPreferences
加载任何内容(不输入for-loop)。
试试
for (int i=0; i<Integer.MAX_VALUE; i++) {
String s = settings.getString("radio_name" +i, "")
if (TextUtils.isEmpty(s))
break;
} else {
radio_name_list.add(s);
}
您可能还想避免在应用程序重启后覆盖旧的收藏夹,因此您必须在加载收藏夹后设置 incrementedValue
,例如
incrementedValue = radio_name_list.size();
发生这种情况是因为在重新启动应用程序时,名为 incrementedValue 的变量的值再次变为 0,并且在 for 循环条件语句中未完全填充,这就是循环未按预期执行的原因。要解决此问题,您可以再做一件事,您还需要将 incrementedValue 的值保存在共享首选项中,并在 for 循环测试语句中从共享首选项中获取更新的值。希望对你有帮助