Как сохранить избранное в настройках Android - PullRequest
0 голосов
/ 15 ноября 2011

Я бы хотел использовать Настройки для хранения любимых слов из моего словарного приложения.Я знаю, что это неразумно (как некоторые из вас советовали), но в настоящее время использование предпочтений кажется мне лучшим выбором.

Однако у меня есть проблема, заключающаяся в том, что приложение не сохраняетлюбимые слова, хотя все выглядит нормально (я имею в виду ошибки не найдены).Вот мой код:

//Saving to favourites
    btnAddFavourite = (ImageButton) findViewById(R.id.btnAddFavourite);
    btnAddFavourite.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                if (prefs.getBoolean("saveFavourite", true) && mWordFavourite != null && mWordFavourite.size() >= 1)
                {
                    saveFavouriteToPreferences();
                    StringBuilder sbFavourite = new StringBuilder();
                    for (String item : mWordFavourite)
                    {
                        sbFavourite.append(item);
                        sbFavourite.append(",");
                    }

                    String strFavourite = sbFavourite.substring(0, sbFavourite.length()-1);
                    SharedPreferences.Editor editor = prefs.edit();
                    editor.putString("favourite", strFavourite);
                    editor.commit();
                    //Log.i(CONTENT_TAG,"Favourite = " + strFavourite);
                    Log.i(CONTENT_TAG,"Favourite saved!");
                }

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

            private void saveFavouriteToPreferences() {
                // TODO Auto-generated method stub

            }
        });

//Loading favourites
    btnAddFavourite.setOnLongClickListener(new View.OnLongClickListener() {         

        @Override
        public boolean onLongClick(View v) {

            if (prefs.getBoolean("saveFavourite", true))
            {
                String strFavourite = prefs.getString("favourite", "");
                Log.i(CONTENT_TAG, "Favourite loaded");
                if (strFavourite != null && !strFavourite.equals(""))
                {
                    mWordFavourite = new ArrayList<String>(Arrays.asList(strFavourite.split(",")));
                }
                else
                {
                    if (mWordFavourite == null)
                    {
                        mWordFavourite = new ArrayList<String>();
                    }
                    else
                    {
                        mWordFavourite.clear();
                    }
                }
            }
            else
            {
                if (mWordFavourite == null)
                {
                    mWordFavourite = new ArrayList<String>();
                }
                else
                {
                    mWordFavourite.clear();
                }
            }

            // Open the favourite Activity, which in turn will fetch the saved favourites, to show them.
            Intent intent = new Intent(getApplicationContext(), FavouriteView.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            getApplicationContext().startActivity(intent);  

            return false;
        }
    });
}

Я думаю, что Избранное загружено, но сохранено, потому что, когда я нажимаю на кнопку «Избранное», LogCat показывает «Избранное загружено».Вот журнал:

11-15 10:26:40.849: I/ActivityManager(59): Starting activity: Intent {cmp=myapp.dict/.HistoryView }
11-15 10:26:40.899: I/[Dict - Content](283): History saved!
11-15 10:26:40.979: I/[Dict - HistoryView](283): History loaded
11-15 10:26:40.989: D/[Dict - HistoryView](283): mWordHistory = 11
11-15 10:26:40.989: I/[Dict - HistoryView](283): item = english_mylang::8::"B" licence
...
11-15 10:26:41.508: I/ActivityManager(59): Displayed activity myapp.dict/.HistoryView: 607 ms (total 607 ms)
11-15 10:26:44.388: W/KeyCharacterMap(283): No keyboard for id 0
11-15 10:26:44.388: W/KeyCharacterMap(283): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-15 10:26:44.448: I/[Dict - Content](283): resultCode = 0
11-15 10:26:44.458: D/dalvikvm(59): GREF has increased to 301
11-15 10:26:54.454: I/[Dict - Content](283): Favourite loaded
11-15 10:26:54.458: I/ActivityManager(59): Starting activity: Intent { flg=0x10000000 cmp=viettien.kadict/.FavouriteView }
11-15 10:26:54.498: I/[Dict - Content](283): History saved!
11-15 10:26:54.548: I/[Dict - FavouriteView](283): Favourite loaded
11-15 10:26:54.548: D/[Dict - FavouriteView](283): mWordFavourite = 0
11-15 10:26:54.949: I/ActivityManager(59): Displayed activity myapp.dict/.FavouriteView: 448 ms (total 448 ms)

Итак, мои вопросы:

  1. Что я сделал не так?
  2. Как я могу улучшить код?

ОБНОВЛЕНИЕ:

В роли Маниша и Алана Мурапоказал, что есть проблема с "saveFavourite" (логическое значение) .Теперь мне интересно, есть ли какие-либо способы кодирования для сохранения избранного сразу после onClick .Я имею в виду:

//Saving to favourites
btnAddFavourite = (ImageButton) findViewById(R.id.btnAddFavourite);
btnAddFavourite.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

        **//Is it possible to code to save Favourites at this stage?** 

            if (prefs.getBoolean("saveFavourite", true) && mWordFavourite != null && mWordFavourite.size() >= 1)
            {
                saveFavouriteToPreferences();
                StringBuilder sbFavourite = new StringBuilder();
                for (String item : mWordFavourite)
                {
                    sbFavourite.append(item);
                    sbFavourite.append(",");
                }

                String strFavourite = sbFavourite.substring(0, sbFavourite.length()-1);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putString("favourite", strFavourite);
                editor.commit();
                //Log.i(CONTENT_TAG,"Favourite = " + strFavourite);
                Log.i(CONTENT_TAG,"Favourite saved!");
            }

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

        private void saveFavouriteToPreferences() {
            // TODO Auto-generated method stub

        }
    });

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Общие предпочтения, кажется, не очень хороший выбор для ваших нужд, потому что 1) Не рекомендуется хранить большие данные в настройках. 2) Если вы перейдете в настройки-> ваше приложение_> очистить данные на вашем устройстве, все данные, сохраненные в настройках, будут потеряны Почему вы не используете вместо этого sqlite db?

0 голосов
/ 15 ноября 2011

На вашем месте я бы сильно позаимствовал у примера приложения Searchable Dictionary - поскольку он также выполняет поиск по словарю слов, поэтому в нем встроена большая функциональность:

http://developer.android.com/resources/samples/SearchableDictionary/index.html

Трудно отладить ваш код, потому что кажется, что отсутствует так много всего, что может вызвать проблему.

...