我正在编码一个Android字典应用程序。但我得到这个错误: 当我输入EditText时,我会调用onTextChanged(),在这个方法中我执行一个AsyncTask线程。每次输入字符时,应用程序都会调用onTextChange()并执行AsyncTask。例如,我输入“da”应用程序将在数据库中搜索“da%”这个单词,我继续输入“dat”它将启动一个新的AsyncTask线程并在数据库中搜索“dat%”。但2线程创建并在DB中搜索,它会在返回第二个线程之前执行第一个线程(我想在执行线程2之前停止线程1)。这些问题使我的应用运行速度非常慢。如何重新启动搜索AsyncTask线程时Edditext onTextChanged()
这是我的代码:
的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]);
}
}