我有一个 EditText 框。在这个文本框中我使用了afterTextChanged(Editable s)
方法。我有一个包含大约 60,000 个数据的数据库。我正在制作字典。所以我的目标是,当用户在文本框(EditText)中输入任何文本时,它将数据库中的 10 行显示到与输入文本匹配的列表视图中。
在我的主要活动中,我使用afterTextChanged(Editable s)
过
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
mDbHelper.open();
String ss=s.toString();
ArrayList<HashMap<String, String>> list_of_wordmeanings = new ArrayList<HashMap<String, String>>();
Cursor mCursor = mDbHelper.getTestData(ss); // here i got the result from the database
for (int i = 0; i < mCursor.getCount(); i++)
{
mCursor.moveToPosition(i);
HashMap<String, String> hm = new HashMap<String, String>();
String word = mCursor.getString(0).toString();
String meaning = mCursor.getString(1).toString();
hm.put("key_word",word);
hm.put("key_meaning",meaning);
list_of_wordmeanings.add(hm);
}
String[] from = { "key_word","key_meaning" };
int[] to = { R.id.txt1,R.id.txt2};
SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), list_of_wordmeanings, R.layout.list_layout, from, to);
listView.setAdapter(adapter);
mDbHelper.close();
}
});
我用来从数据库中获取数据的函数是这样的:
public Cursor getTestData(String s)
{
try
{
//String sql ="SELECT * FROM Table1 LIMIT 5";//"SELECT * FROM " + TABLE_REGISTRATION +" WHERE "+ KEY_NAME +" LIKE '"+ s +"%'" ;
String sql ="SELECT * FROM dic WHERE english LIKE '"+ s +"%' LIMIT 5" ;
Cursor mCur = mDb.rawQuery(sql, null);
if (mCur!=null)
{
mCur.moveToNext();
}
return mCur;
}
catch (SQLException mSQLException)
{
Log.e(TAG, "getTestData >>"+ mSQLException.toString());
throw mSQLException;
}
}
一切都运行良好,但问题是显示匹配结果非常慢。我怎样才能以更快的方式做到这一点?谁能给我正确的解决方案????