SharedPreferences: история сохранена, но почему не Favorite? - PullRequest
0 голосов
/ 30 января 2012

Я использую следующий код для сохранения слов в журнале в моем приложении-словаре:

@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 Ответ

1 голос
/ 30 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...