代码之家  ›  专栏  ›  技术社区  ›  furkanbzkurt

应用程序重新启动时SharedReferences不保存数据

  •  0
  • furkanbzkurt  · 技术社区  · 7 年前

    我正在尝试在我的应用程序中创建“添加收藏夹”按钮。我可以用 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, ""));
            }
    

    然后我在listview中显示它们

    2 回复  |  直到 7 年前
        1
  •  1
  •   fweigl    7 年前
    for (int i=0; i<PlayRadioFragment.incrementedValue; i++)
    

    重新启动应用程序(或片段)后 incrementedValue 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 = radio_name_list.size(); 
    
        2
  •  0
  •   Abdul Waheed    7 年前

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