SharedPreference 只保存一个值
SharedPreference saving just one value
我正在尝试在我的应用程序中制作收藏夹模块。如果用户单击收音机的收藏按钮,则该收音机必须显示在收藏夹屏幕中。但只是在收藏夹屏幕中显示了最后一次单击的收音机。我想在收藏夹中保存多个收音机。我哪里做错了?提前致谢。
这是 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;
}
}
由于您对每个单选按钮插入使用相同的键,它将覆盖以前的值。
您需要将值存储在数组中,然后将数组存储在首选项中。
或者更好的方法是在android中使用sqllite数据库将喜欢存储在table中。
尝试在 ListView 中显示列表 radio_name_list 和 radio_link_list 中的值:
- 将值保存在数组列表中。
- 创建 ListView 而不是 TextView。
- 创建一个 ArrayAdapter 并将其设置为您的 ListView 的适配器。
据我所知,您只有一个 TextView。尝试创建一个 ListView 而不是 TextView。会更有条理。
您有大量数据,共享首选项不是用于存储 7000 项数据的写入选项。共享首选项有利于简单且不太频繁的数据存储,对于您的情况,您需要制作一个 SQLite 数据库。如果它对您来说是全新的,那么请访问 this link.
中的 Androids only Documentation Training
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);
现在你有了一对 key-value,你可以像这样迭代你的收藏夹:
String radioLink = "", radioKey = "";
for (Map.Entry<String, ?> entry : getSharedPreferences("PREFS",0).getAll().entrySet()) {
radioKey = entry.getKey();
radioLink = (String) entry.getValue();
}
我正在尝试在我的应用程序中制作收藏夹模块。如果用户单击收音机的收藏按钮,则该收音机必须显示在收藏夹屏幕中。但只是在收藏夹屏幕中显示了最后一次单击的收音机。我想在收藏夹中保存多个收音机。我哪里做错了?提前致谢。
这是 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;
}
}
由于您对每个单选按钮插入使用相同的键,它将覆盖以前的值。
您需要将值存储在数组中,然后将数组存储在首选项中。
或者更好的方法是在android中使用sqllite数据库将喜欢存储在table中。
尝试在 ListView 中显示列表 radio_name_list 和 radio_link_list 中的值:
- 将值保存在数组列表中。
- 创建 ListView 而不是 TextView。
- 创建一个 ArrayAdapter 并将其设置为您的 ListView 的适配器。
据我所知,您只有一个 TextView。尝试创建一个 ListView 而不是 TextView。会更有条理。
您有大量数据,共享首选项不是用于存储 7000 项数据的写入选项。共享首选项有利于简单且不太频繁的数据存储,对于您的情况,您需要制作一个 SQLite 数据库。如果它对您来说是全新的,那么请访问 this link.
中的 Androids only Documentation Trainingeditor.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);
现在你有了一对 key-value,你可以像这样迭代你的收藏夹:
String radioLink = "", radioKey = "";
for (Map.Entry<String, ?> entry : getSharedPreferences("PREFS",0).getAll().entrySet()) {
radioKey = entry.getKey();
radioLink = (String) entry.getValue();
}