Android 如何使用SharedReference存储字符串数组?
我想在选中切换按钮时保存两个字符串值,并从另一个Android 如何使用SharedReference存储字符串数组?,android,android-fragments,android-recyclerview,sharedpreferences,Android,Android Fragments,Android Recyclerview,Sharedpreferences,我想在选中切换按钮时保存两个字符串值,并从另一个片段中检索它。这是我对按钮OnClickListener所做的操作,但它不起作用: holder.favButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton favButton, boolean isChecked){
片段中检索它。这是我对按钮OnClickListener
所做的操作,但它不起作用:
holder.favButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton favButton, boolean isChecked){
if (isChecked)
favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(),R.mipmap.ic_launcher));
PreferenceManager.getDefaultSharedPreferences(context).edit().putString("PRODUCT_APP", "Product_Favorite").commit();
else
favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(), R.mipmap.ic_cart));
}
});
这是我的SharedReference
类
public class SharedPreference {
public static final String PREFS_NAME = "PRODUCT_APP";
public static final String FAVORITES = "Product_Favorite";
public SharedPreference() {
super();
}
// This four methods are used for maintaining favorites.
public void saveFavorites(Context context, List<CardItemModel> favorites) {
SharedPreferences settings;
SharedPreferences.Editor editor;
settings = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
editor = settings.edit();
Gson gson = new Gson();
String jsonFavorites = gson.toJson(favorites);
editor.putString(FAVORITES, jsonFavorites);
editor.commit();
}
public void addFavorite(Context context, CardItemModel product) {
List<CardItemModel> favorites = getFavorites(context);
if (favorites == null)
favorites = new ArrayList<CardItemModel>();
favorites.add(product);
saveFavorites(context, favorites);
}
public void removeFavorite(Context context, CardItemModel product) {
ArrayList<CardItemModel> favorites = getFavorites(context);
if (favorites != null) {
favorites.remove(product);
saveFavorites(context, favorites);
}
}
public ArrayList<CardItemModel> getFavorites(Context context) {
SharedPreferences settings;
List<CardItemModel> favorites;
settings = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
if (settings.contains(FAVORITES)) {
String jsonFavorites = settings.getString(FAVORITES, null);
Gson gson = new Gson();
CardItemModel[] favoriteItems = gson.fromJson(jsonFavorites,
CardItemModel[].class);
favorites = Arrays.asList(favoriteItems);
favorites = new ArrayList<CardItemModel>(favorites);
} else
return null;
return (ArrayList<CardItemModel>) favorites;
}
}
公共类共享引用{
公共静态最终字符串PREFS_NAME=“PRODUCT_APP”;
公共静态最终字符串FAVORITES=“Product\u Favorite”;
公共共享引用(){
超级();
}
//这四种方法用于维护收藏夹。
公共void保存收藏夹(上下文、列表收藏夹){
共享引用设置;
SharedReferences.Editor;
设置=context.getSharedReferences(首选名称,
上下文。模式(私人);
editor=settings.edit();
Gson Gson=新的Gson();
字符串jsonFavorites=gson.toJson(收藏夹);
putString(收藏夹,jsonFavorites);
commit();
}
public void addFavorite(上下文、CardItemModel产品){
列表收藏夹=获取收藏夹(上下文);
如果(收藏夹==null)
收藏夹=新的ArrayList();
收藏。添加(产品);
保存收藏夹(上下文、收藏夹);
}
public void removeFavorite(上下文、CardItemModel产品){
ArrayList favorites=getFavorites(上下文);
如果(收藏夹!=null){
收藏。删除(产品);
保存收藏夹(上下文、收藏夹);
}
}
公共ArrayList getFavorites(上下文){
共享引用设置;
列出收藏夹;
设置=context.getSharedReferences(首选名称,
上下文。模式(私人);
如果(设置.包含(收藏夹)){
String jsonFavorites=settings.getString(收藏夹,null);
Gson Gson=新的Gson();
CardItemModel[]favoriteItems=gson.fromJson(jsonFavorites,
CardItemModel[]类);
收藏夹=数组.asList(收藏夹项);
收藏夹=新的阵列列表(收藏夹);
}否则
返回null;
返回(ArrayList)收藏夹;
}
}
让我们来解决这个问题。
您可以在单个首选项中保存多个收藏夹,方法是在单个字符串中添加多个收藏夹,每个收藏夹项目用逗号分隔。然后可以使用convertStringToArray
方法将其转换为字符串数组。这是完整的源代码。
使用MyUtility方法保存多个收藏夹项
MyUtility.addFavoriteItem(this, "Sports");
MyUtility.addFavoriteItem(this, "Entertainment");
获取保存的所有收藏夹的字符串数组
String[] favorites = MyUtility.getFavoriteList(this);// returns {"Sports","Entertainment"};
将这些方法保存在单独的实用程序类中
public abstract class MyUtility {
public static boolean addFavoriteItem(Activity activity,String favoriteItem){
//Get previous favorite items
String favoriteList = getStringFromPreferences(activity,null,"favorites");
// Append new Favorite item
if(favoriteList!=null){
favoriteList = favoriteList+","+favoriteItem;
}else{
favoriteList = favoriteItem;
}
// Save in Shared Preferences
return putStringInPreferences(activity,favoriteList,"favorites");
}
public static String[] getFavoriteList(Activity activity){
String favoriteList = getStringFromPreferences(activity,null,"favorites");
return convertStringToArray(favoriteList);
}
private static boolean putStringInPreferences(Activity activity,String nick,String key){
SharedPreferences sharedPreferences = activity.getPreferences(Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, nick);
editor.commit();
return true;
}
private static String getStringFromPreferences(Activity activity,String defaultValue,String key){
SharedPreferences sharedPreferences = activity.getPreferences(Activity.MODE_PRIVATE);
String temp = sharedPreferences.getString(key, defaultValue);
return temp;
}
private static String[] convertStringToArray(String str){
String[] arr = str.split(",");
return arr;
}
}
如果您必须添加额外的收藏夹。然后从SharedReference
获取收藏夹字符串,并附加逗号+收藏夹项,然后将其保存回SharedReference
。
*您可以使用任何其他字符串作为分隔符而不是逗号。让我们来解决这个问题。
您可以在单个首选项中保存多个收藏夹,方法是在单个字符串中添加多个收藏夹,每个收藏夹项目用逗号分隔。然后可以使用convertStringToArray
方法将其转换为字符串数组。这是完整的源代码。
使用MyUtility方法保存多个收藏夹项
MyUtility.addFavoriteItem(this, "Sports");
MyUtility.addFavoriteItem(this, "Entertainment");
获取保存的所有收藏夹的字符串数组
String[] favorites = MyUtility.getFavoriteList(this);// returns {"Sports","Entertainment"};
将这些方法保存在单独的实用程序类中
public abstract class MyUtility {
public static boolean addFavoriteItem(Activity activity,String favoriteItem){
//Get previous favorite items
String favoriteList = getStringFromPreferences(activity,null,"favorites");
// Append new Favorite item
if(favoriteList!=null){
favoriteList = favoriteList+","+favoriteItem;
}else{
favoriteList = favoriteItem;
}
// Save in Shared Preferences
return putStringInPreferences(activity,favoriteList,"favorites");
}
public static String[] getFavoriteList(Activity activity){
String favoriteList = getStringFromPreferences(activity,null,"favorites");
return convertStringToArray(favoriteList);
}
private static boolean putStringInPreferences(Activity activity,String nick,String key){
SharedPreferences sharedPreferences = activity.getPreferences(Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, nick);
editor.commit();
return true;
}
private static String getStringFromPreferences(Activity activity,String defaultValue,String key){
SharedPreferences sharedPreferences = activity.getPreferences(Activity.MODE_PRIVATE);
String temp = sharedPreferences.getString(key, defaultValue);
return temp;
}
private static String[] convertStringToArray(String str){
String[] arr = str.split(",");
return arr;
}
}
如果您必须添加额外的收藏夹。然后从SharedReference
获取收藏夹字符串,并附加逗号+收藏夹项,然后将其保存回SharedReference
。
*您可以使用任何其他字符串作为分隔符,而不是逗号。此链接可能很有用:您的setOnCheckedChangeListener
不应该工作。最后一个else部分没有if对应。请先修复代码,然后再发布代码。它会给您一个编译错误。此链接可能很有用:您的setOnCheckedChangeListener
不应该工作。最后一个else部分没有if对应。请先修复代码,然后再发布代码。它会给你一个编译错误。