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;
}
}
すべてがうまく機能していますが、一致する結果の表示が非常に遅いという問題があります。どうすればもっと速くできますか?? 誰かが私に適切な解決策を教えてもらえますか????