Nia*_*yle 11 database android 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();
}
Run Code Online (Sandbox Code Playgroud)
问题是它不会保留多个最喜欢的单词.我的意思是只保存了一个最喜欢的单词,当添加新单词时,前一个单词被删除.
那么,如何编辑上面的代码以便解决这个问题呢?
你们有帮助吗?非常感谢你.
Muh*_*rif 19
通过在单个字符串中添加多个收藏夹,您可以在一个首选项中保存多个收藏夹,每个收藏夹项目用逗号分隔.然后您可以使用convertStringToArray方法将其转换为String Array.这是完整的源代码.
使用MyUtility Methods保存多个喜欢的项目.
MyUtility.addFavoriteItem(this, "Sports");
MyUtility.addFavoriteItem(this, "Entertainment");
Run Code Online (Sandbox Code Playgroud)
获取保存的所有收藏夹的String数组
String[] favorites = MyUtility.getFavoriteList(this);// returns {"Sports","Entertainment"};
Run Code Online (Sandbox Code Playgroud)
将这些方法保存在单独的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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你必须添加额外的收藏夹.然后从中获取最喜欢的字符串SharedPreference并附加逗号+最喜欢的项目并将其保存回来SharedPreference.
*您可以使用任何其他字符串作为分隔符而不是逗号.
SharedPreferences通过简单的键/值工作,因此当您为同一个键提供新值时,将覆盖之前的值.做你想要做的事情的唯一方法是使用不同的键,这些暗示你可能不应该SharedPreferences用于你想要做的事情.
Honeycomb添加了这种putStringSet方法,所以你可以使用它,如果你不需要支持少于Honeycomb的东西:
@Override
public void onClick(View v) {
SharedPreferences faves = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
{
Set<String> faveSet = faves.getStringSet("favourite");
faveSet.add(mSelectedDB + "::" + mCurrentWordId + "::" + mCurrentWord + ",");
SharedPreferences.Editor editor = faves.edit();
editor.putStringSet("favourite", faveSet);
editor.commit();
}
Log.i(CONTENT_TAG,"Favourite saved!");
Toast toast = Toast.makeText(ContentView.this, R.string.messageWordAddedToFarvourite, Toast.LENGTH_SHORT);
toast.show();
}
Run Code Online (Sandbox Code Playgroud)
如果您需要支持预蜂窝设备,您必须提出自己的方案.
一种可能性是将单词作为逗号分隔值存储在一个首选项中.
另一种方法是为每个新单词"favourite1","favourite2","favourite3"生成一个新密钥,并使用另一个首选项来存储单词的数量.
| 归档时间: |
|
| 查看次数: |
34359 次 |
| 最近记录: |