繁体   English   中英

应用重新启动时SharedPreferences不保存数据

[英]Sharedpreferences not saving data when app restart

我正在尝试在我的应用中创建“添加收藏夹”按钮。 我可以正确地使用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循环)。

尝试类似

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(); 

之所以发生这种情况,是因为在重新启动应用程序时,名为递增值的变量再次获得值0,并且在for循环中条件语句未完全填充,这就是循环未按预期执行的原因。 若要解决此问题,您还可以做另一件事,您还需要将增量值的值保存在共享首选项中,并且在for循环测试语句中,从共享首选项中获取更新的值。 希望对您有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM