我正在编写一个Android词典应用程序。但我得到这个错误: 当我在EditText中输入时,我会调用onTextChanged(),在这个方法中我执行一个AsyncTask线程。每次我输入一个字符时,app都会调用onTextChange()并执行AsyncTask。例如,我正在打字" da"应用程序将搜索" da%"这个词在数据库中,我继续键入" dat"它将启动一个新的AsyncTask线程并搜索" dat%"在DB中。但是创建了2个线程并在DB中搜索,它将在返回第二个线程之前执行第一个线程(我想在执行线程2之前停止线程1)。这些问题使我的应用运行速度非常慢。
这是我的代码:
EditText的功能:
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {
keyword = txtKeyword.getText().toString().trim();
new Searching().execute("500");
}
});
AsyncTask类:
private class Searching extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
publishProgress("Searching...");
try {
searchlist = search(keyword);//this method will search in DB (SELECT * FFROM dictionary where word like 'da%';)
} catch (Exception e) {
e.printStackTrace();
resp = e.getMessage();
}
return null;
}
@Override
protected void onPostExecute(String result) {
adapter.setListView(searchlist);
lvData.setAdapter(adapter);
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(String... text) {
txtResult.setText(text[0]);
}
}