【发布时间】:2013-02-28 12:16:58
【问题描述】:
我有一个字典数据库,它总共包含 99,833 个单词,但每个字母分开。 我正在测试包含 3922 个单词的 dictionaryA.txt。
案例一:
当我输入一个我想查找的单词时,让我们说“算盘”, 使用缓冲阅读器,我的应用程序显示“论文没有响应。等待 - 退出”。如果我选择等待,它将返回单词 abacus 及其定义。
代码:
InputStream inputStream = getResources().openRawResource(R.raw.definitiona);
try {
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String s = in.readLine();
String delimiter = " - ";
String del[];
while(s != null)
{
s = in.readLine().replaceAll("\\s+", " ");
del = s.split(delimiter);
if (enhancedStem.equals(del[0]))
{
in.close();
databaseOutput.setText(s);
break;
}
}
in.close();
}
catch (FileNotFoundException e) {
databaseOutput.setText("" + e);
}
catch (IOException e1) {
databaseOutput.setText("" + e1);
}
案例 2:
当我输入一个我想查找的单词时,让我们说“算盘”, 使用strings.xml(我在一个字符串数组中传输了整个3922个单词),它说的是一样的。我必须在它响应之前点击等待。
代码:
String[] wordA = getResources().getStringArray(R.array.DictionaryA);
String delimiter = " - ";
String[] del;
for (int wordActr = 0; wordActr <= wordA.length - 1; wordActr++)
{
String wordString = wordA[wordActr].toString();
del = wordString.split(delimiter);
if (enhancedStem.equals(del[0]))
{
databaseOutput.setText(wordA[wordActr]);
break;
}
else
databaseOutput.setText("Word not found!");
}
你能告诉我哪个更好吗?我应该继续使用我的文本文件吗?或者将它们转移到strings.xml,因为它们都响应缓慢?您知道如何消除“无响应”问题吗? 提前致谢!
【问题讨论】:
-
这并不奇怪,问题是,您通过在 UI 线程上执行繁重的工作来冻结 UI。
-
您应该使用实际的 SQLite 数据库,而不是文本文件或 strings.xml。
-
你需要实现一个异步任务来完成繁重的工作,因为无论你做什么,你都有可能得到 ANR。在处理请求时显示进度视图,然后使用结果更新视图。
-
@VX - 嗨!我更新了代码。
-
@Raghav - 我也想使用 SQLite,因为我读到它是最好的方法,但我真的没有时间了。不熟悉 SQL 代码,而且我没有字典的 sql 数据库。
标签: android text-files arrays notepad