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

Но не работает и любимые слова не сохраняются как в случае с Историей.

Можете ли вы, ребята, помочь? Большое Вам спасибо.


person Niamh Doyle    schedule 30.01.2012    source источник


Ответы (1)


Я изменяю свой ответ для этого StackOverflow ссылка.
Вы можете сохранить несколько избранных в одном параметре, добавив несколько избранных в одну строку, разделяя каждый избранный элемент запятой. Затем вы можете использовать метод 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"};

Сохраните эти методы в отдельном классе 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.
* Вы можете использовать любую другую строку в качестве разделителя вместо запятой.

person Muhammad Nabeel Arif    schedule 30.01.2012
comment
Очень мило с вашей стороны! Вы доступны для общения сейчас? - person Niamh Doyle; 30.01.2012