如何在Edditext onTextChanged()时重新启动搜索AsyncTask线程

时间:2015-08-15 12:10:54

标签: android multithreading android-asynctask android-edittext textchanged

我正在编写一个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]);
  }
}

0 个答案:

没有答案