【问题标题】:SharedPreference saving just one valueSharedPreference 只保存一个值
【发布时间】:2017-09-23 18:26:19
【问题描述】:

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

这是 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();
            }
        });

我正在尝试获取这些值并将 ArrayList 放入 FavoritesFragment 中。为了显示接收到的值,我将它们发送到 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;
    }


}

【问题讨论】:

  • 你有 7000 把钥匙吗?我建议你使用 SQLite。

标签: android sharedpreferences android-sharedpreferences


【解决方案1】:

您有大量数据,共享首选项不是存储 7000 项数据的写入选项。共享偏好有利于轻松和不那么频繁的数据存储,对于您的情况,您需要创建一个 SQLite 数据库。如果它对您来说是全新的,那么请访问 this link. 的 Androids only Documentation Training

【讨论】:

    【解决方案2】:

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

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

    或者更好的方法是使用android中的sqllite数据库将likes存储在一个表中。

    【讨论】:

    • 我有 7000 多个无线电链接和名称。你的意思是我需要将所有这些值写入数组?我是 Android 新手,你能在我的代码上解释一下吗?
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 最后,我用了你的方式。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多