2012-01-30 26 views
0

我用下面的代碼保存字的歷史在我的字典應用程序:SharedPreferences:歷史已保存,但爲什麼不收藏?

@Override 
public void onPause() 
{ 
    super.onPause(); 
    saveHistoryToPreferences(); 
} 

public void saveHistoryToPreferences() 
{ 
    if (prefs.getBoolean("saveHistory", true) && mWordHistory != null && mWordHistory.size() >= 1) 
    { 
     StringBuilder sbHistory = new StringBuilder(); 
     for (String item : mWordHistory) 
     { 
      sbHistory.append(item); 
      sbHistory.append(","); 
     }   
     String strHistory = sbHistory.substring(0, sbHistory.length()-1); 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putString("history", strHistory); 
     editor.commit(); 
     //Log.i(CONTENT_TAG,"history = " + strHistory); 
     Log.i(CONTENT_TAG,"History saved!"); 
    } 
} 

public void loadHistoryFromPreferences() 
{ 
    if (prefs.getBoolean("saveHistory", true)) 
    { 
     String strHistory = prefs.getString("history", ""); 
     Log.i(CONTENT_TAG, "History loaded"); 
     if (strHistory != null && !strHistory.equals("")) 
     { 
      mWordHistory = new ArrayList<String>(Arrays.asList(strHistory.split(","))); 
     } 
     else 
     { 
      if (mWordHistory == null) 
      { 
       mWordHistory = new ArrayList<String>(); 
      } 
      else 
      { 
       mWordHistory.clear(); 
      } 
     } 
    } 
    else 
    { 
     if (mWordHistory == null) 
     { 
      mWordHistory = new ArrayList<String>(); 
     } 
     else 
     { 
      mWordHistory.clear(); 
     } 
    } 
} 

一切工作正常的歷史。

現在我想調整此代碼以保存喜歡的單詞。幾乎每行代碼都是一樣的,唯一不同的是,適應代碼(不onPause())被劃歸:

btnAddFavourite.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) 
    //The code is here... 
    } 

但它沒有工作,喜歡的話是不是保存在歷史記錄的情況下。

你們能幫忙嗎?非常感謝你。

回答

1

我修改我的答案this StackOverflow link.
可以在一個單一的偏好在一個字符串,用逗號分隔每個收藏的項目加入收藏夾衆多保存多個收藏夾。然後您可以使用convertStringToArray方法將其轉換爲字符串數組。這裏是完整的源代碼。
使用MyUtility方法保存多個收藏夾項目。

btnAddFavourite.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) 

       MyUtility.addFavoriteItem(MyActivity.this, "Sports"); 
       MyUtility.addFavoriteItem(MyActivity.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; 
    } 
} 

保存這些方法如果您有添加額外的收藏夾。然後從SharedPreference得到最喜歡的字符串,並附加逗號+最喜歡的項目,並將其保存回SharedPreference
*您可以使用任何其他字符串作爲分隔符而不是逗號。

+0

這真是太好了!你是否[現在可以聊天?](http://chat.stackoverflow.com/rooms/7163/discussion-between-niamh-doyle-and-muhammad-nabeel-arif) – 2012-01-30 11:55:13