我想使用偏好设置来存储我的词典应用中最喜欢的单词。我知道这样做是不明智的(正如你们中的一些人所建议的那样),但目前使用偏好似乎是我的最佳选择。
然而,我有一个问题,即应用程序不保存喜欢的单词,虽然一切看起来都正常(我的意思是没有发现错误)。以下是我的代码:
//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)
所以我的问题是:
的更新: 的
正如Maneesh和Alan Moore所示,“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
}
});
非常感谢。
答案 0 :(得分:1)
共享偏好似乎是您需要的不错选择,因为 1)不建议将大数据存储在首选项中。 2)如果你去设置 - >你的应用程序&gt;清除设备中的数据,所有存储在首选项中的数据都将丢失 为什么不使用sqlite db?
答案 1 :(得分:0)
如果我是你,我会从Searchable Dictionary示例应用程序中大量借用 - 因为它还会搜索单词词典,因此很多功能都在那里构建:
http://developer.android.com/resources/samples/SearchableDictionary/index.html
很难调试你的代码,因为很多东西似乎都缺失了,这可能会导致问题。