Я бы хотел использовать Настройки для хранения любимых слов из моего словарного приложения.Я знаю, что это неразумно (как некоторые из вас советовали), но в настоящее время использование предпочтений кажется мне лучшим выбором.
Однако у меня есть проблема, заключающаяся в том, что приложение не сохраняетлюбимые слова, хотя все выглядит нормально (я имею в виду ошибки не найдены).Вот мой код:
//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)
Итак, мои вопросы:
- Что я сделал не так?
- Как я могу улучшить код?
ОБНОВЛЕНИЕ:
В роли Маниша и Алана Мурапоказал, что есть проблема с "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
}
});
Большое спасибо.