SharedPreference只保存一个值

时间:2017-09-23 18:26:19

标签: android sharedpreferences android-sharedpreferences

我试图在我的应用中制作收藏夹模块。如果用户单击收音机的收藏夹按钮,则此收音机必须显示在收藏夹屏幕中。但只是最后点击收藏夹屏幕中显示的收音机。我想在收藏夹中保存多个收音机。哪里我做错了?提前谢谢。

这是RadioFragment中最喜欢的按钮

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", radio_play_link);
                editor.putString("radio_namee", radio_name);
                editor.commit();
            }
        });

我试图获取这些值并将其放入FavoritesFragment中的ArrayList中。为了显示收到的值,我在textview中发送它们以尝试。

public class FavoritesFragment extends Fragment {

    public FavoritesFragment() {
        // Required empty public constructor
    }

    TextView radio_name_txt, radio_link_txt;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view=  inflater.inflate(R.layout.fragment_favorites, container, false);

        List<String> radio_name_list = new ArrayList<>();
        List<String> radio_link_list = new ArrayList<>();
        SharedPreferences settings = getActivity().getSharedPreferences("PREFS",0);
        radio_name_list.add(settings.getString("radio_namee", ""));
        radio_link_list.add(settings.getString("radio_link", ""));


        radio_name_txt = (TextView) view.findViewById(R.id.radio_name_txt);
        radio_link_txt = (TextView) view.findViewById(R.id.radio_link_txt);
        String a= "";
        String b= "";

        for (int i =0; i<radio_name_list.size(); i++) {
            a = a +radio_name_list.get(i);
            b = b +radio_link_list.get(i);
        }

        radio_name_txt.setText(a);
        radio_link_txt.setText(b);

        return view;
    }


}

4 个答案:

答案 0 :(得分:1)

因为您为每个单选按钮插入使用相同的键,它将覆盖以前的值。

您需要将值存储在数组中,然后将数组存储在首选项中。

或者更好的方法是在android中使用sqllite数据库将喜欢的内容存储在表格中。

答案 1 :(得分:1)

尝试在列表视图中显示列表radio_name_list和radio_link_list中的值:

  • 将值保存在数组列表中。
  • 创建ListView而不是TextView。
  • 创建一个ArrayAdapter并将其设置为ListView的适配器。

据我所知,你只有一个TextView。尝试创建ListView而不是TextView。它会更有条理。

答案 2 :(得分:1)

您有大量数据,共享首选项不是存储7000项数据的写入选项。共享首选项适用于简单且不太频繁的数据存储。对于您的情况,您需要创建SQLite数据库。如果它对您来说是全新的,那么只需访问this link.

中的Androids only Documentation Training

答案 3 :(得分:1)

  

editor.putString(&#34; radio_link&#34;,radio_play_link);   editor.putString(&#34; radio_namee&#34;,radio_name);

每次尝试添加新的时,都会覆盖收藏夹,所以不要执行上述操作,请执行以下操作:

editor.putString(radio_play_link, radio_play_link);
editor.putString(radio_name, radio_name);

所以现在你有了一个键值对,你可以像这样迭代你的收藏夹:

String radioLink = "", radioKey = "";    
for (Map.Entry<String, ?> entry : getSharedPreferences("PREFS",0).getAll().entrySet()) {
        radioKey = entry.getKey();
        radioLink = (String) entry.getValue();         
}