2017-09-25 89 views
0

我试图在我的应用程序中添加“添加收藏夹”按钮。我可以正确地发送sharedpreferences并获得价值,但是当我重新启动应用时,收藏夹再次为空。我想我需要重写OnPause方法,但我无法正确应用。我需要帮助,提前谢谢。应用程序重新启动时不保存数据的Sharedpreferences

演奏RADIO片段

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, "")); 
     } 

... 然后我告诉他们在列表视图 ...

+0

你在做什么重新启动应用程序? –

+0

我不明白你的意思。不久,我想说;当我关闭应用程序时,收藏夹消失了。 – PinkRabbits

+0

这个变量在做什么?你怎么初始化这个?递增值 –

回答

1
for (int i=0; i<PlayRadioFragment.incrementedValue; i++) 

重新启动应用程序(或片段)后,此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(); 
+0

你太棒了!真的谢谢你,它工作。但这一次,当我重新启动应用程序,如果我想添加一个新的收藏电台,它覆盖在listview的第一个项目:( – PinkRabbits

+0

@PinkRabbits我编辑了我的问题,你必须更新你递增的值到列表的大小“开始你离开的地方”可以这么说 – FWeigl

+0

感谢你两次,其实它很简单,现在工作正常 – PinkRabbits

0

这是后因为在重新启动应用程序时,名为incrementedValue的变量再次获取值为0,并且在for循环条件语句未完全填充,这就是为什么循环未按预期执行的原因。为了解决这个问题,你可以做更多的事情来将增量值的值保存在共享首选项中,并在for循环测试语句中获取来自共享首选项的更新值。希望可以帮助你

+0

这是正确的答案,真的很感谢你 – PinkRabbits

+0

如果我的回答帮助你,请标记为已接受 –

相关问题