android - 如何使用 SharedPreferences 保存多个值?

标签 android database sharedpreferences

我正在开发一个字典应用程序。在我的应用程序中,我假设用户想要保存最喜欢的词。我决定使用 SharedPreferences 来保存这些值(我知道 SQLite 和文件更好,但我坚持使用“SharedPreferences”,所以继续使用它)。

下面是我的代码:

@Override
public void onClick(View v) {                                       
    SharedPreferences faves = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    { 
        SharedPreferences.Editor editor = faves.edit();
        editor.putString("favourite", mSelectedDB + "::" + mCurrentWordId + "::" + mCurrentWord + ",");
        editor.commit();    
    }
    Log.i(CONTENT_TAG,"Favourite saved!");

    Toast toast = Toast.makeText(ContentView.this, R.string.messageWordAddedToFarvourite, Toast.LENGTH_SHORT);
    toast.show();   
}

问题是它不会保留超过一个最喜欢的词。我的意思是只保存一个最喜欢的词,当添加一个新词时,之前的词会被删除。

那么,如何修改上面的代码来解决这个问题呢?

你们能帮忙吗?非常感谢。

最佳答案

您可以在单个首选项中保存多个收藏夹,方法是在单个字符串中添加多个收藏夹,每个收藏夹以逗号分隔。然后你可以使用 convertStringToArray 方法将其转换为字符串数组。这是完整的源代码。
使用 MyUtility 方法保存多个最喜欢的项目。

            MyUtility.addFavoriteItem(this, "Sports");
            MyUtility.addFavoriteItem(this, "Entertainment");

获取保存的所有收藏夹的字符串数组

String[] favorites = MyUtility.getFavoriteList(this);// returns {"Sports","Entertainment"};

将这些方法保存在单独的 Utility 类中

 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;
    }
}

如果您必须添加额外的收藏夹。然后从 SharedPreference 中获取最喜欢的字符串并附加逗号+最喜欢的项目并将其保存回 SharedPreference
* 您可以使用任何其他字符串作为分隔符而不是逗号。

关于android - 如何使用 SharedPreferences 保存多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9054193/

相关文章:

android - 日期格式在 Android 中不起作用?

android - 自定义 Snackbar 宽度未在平板电脑中设置 MATCH_PARENT

python - 基维,ModuleNotFoundError : No module named '_ctypes' when building an android app

C++ ADO 连接池

c# - 带搜索框的多线程

android - 执行一段代码一次

android - 我想在 android 的共享首选项中存储注册和登录信息

java - 如何将 YUV422 转换为 YUV420

php - 将mysql数据库导出到excel

android - 如何在 Android 的共享首选项中保存图像 | Android 中带有图像的共享偏好问题