【发布时间】:2023-04-02 05:47:01
【问题描述】:
它是一个字典搜索,当一个人输入文本时,会弹出建议。 数据库是英文词典。
//Search System
final Context ctx = this;
autoCompleteTextView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (autoCompleteTextView.getText().length() >= 2) {
DbHandler handler = new DbHandler(getApplicationContext());
final ArrayList<String> Deflist = handler.getSearchList(autoCompleteTextView.getText().toString().trim());
suggestions = Deflist;
handler.close();
if (Deflist != null) {
Search.this.runOnUiThread(new Runnable() {
@Override
public void run() {
ArrayAdapter adapter = new ArrayAdapter(ctx, android.R.layout.simple_list_item_1, Deflist);
autoCompleteTextView.setAdapter(adapter);
autoCompleteTextView.setThreshold(1);
}
});
}
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
数据库代码
public void indexDB()
{
try{
getWritableDatabase().execSQL("CREATE INDEX words_index ON entries(word)");
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public ArrayList<String> getSearchList(String partWord) {
try {
if (partWord == "") {
return null;
}
ArrayList<Definition> DefList = new ArrayList<>();
ArrayList<String> test = new ArrayList<>();
Definition definition = null;
Cursor cursor = getReadableDatabase().rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE word LIKE '" + partWord + "%'", null);
try {
if (cursor.moveToFirst()) {
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
String word = cursor.getString(cursor.getColumnIndex("word"));
if (!test.contains(word)) {
test.add(word);
}
}
}
} catch (Exception e) {
cursor.close();
}
return test;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
我尝试过对其进行索引,将限制设置为 2 或更多以开始搜索,甚至尝试在单独的线程中运行(放弃了多线程的想法不一致)。有没有办法让它变得非常快?
【问题讨论】:
-
与其从孔表中寻找,不如根据字母表缩短表
-
@NeelaySrivastava 它是一个字典数据库,它已经排序了。
-
你的意思是,你关注了这个? developer.android.com/training/search/search.html
-
兄弟那么你为什么不检查这个词就像一个排列问题一样检查单词“Hello”的位置 fr ex-我们首先检查 H 然后 e 的单词等等,这将减少努力
-
@NeelaySrivastava 看,它像谷歌搜索一样工作,我输入 He,它显示以 He 开头的单词,然后输入 Hel,它显示来自 Hel 的单词......等等。你的建议是找到一个特定的词。
标签: android performance