Android 异步任务使用OnClick减慢

Android 异步任务使用OnClick减慢,android,android-asynctask,onclicklistener,Android,Android Asynctask,Onclicklistener,早上好, 我的android应用程序上有一个按钮,可以通过异步任务(通过google端点)在web上启动搜索。我的问题是,在异步任务完成之前,按钮不会“松开”,这可能需要几秒钟的时间。当internet连接缓慢时,这甚至会导致应用程序崩溃,在任何情况下,应用程序都会完全停滞,直到异步任务完成。现在使用AsyncTask的原因正是为了消除这个问题,所以我不知道会发生什么 以下是OnClickListener: SearchListener = new OnClickListener() { @

早上好, 我的android应用程序上有一个按钮,可以通过异步任务(通过google端点)在web上启动搜索。我的问题是,在异步任务完成之前,按钮不会“松开”,这可能需要几秒钟的时间。当internet连接缓慢时,这甚至会导致应用程序崩溃,在任何情况下,应用程序都会完全停滞,直到异步任务完成。现在使用AsyncTask的原因正是为了消除这个问题,所以我不知道会发生什么

以下是OnClickListener:

SearchListener = new OnClickListener() {
  @Override
  public void onClick(View v) {     
      String cname=TextCourse.getText().toString();
      if (!cname.isEmpty()){
          try {
              CollectionResponseWine listavini= new QueryWinesTask(messageEndpoint,cname,5).execute().get();
          } catch (InterruptedException e) {
              showDialog("Errore ricerca");
              e.printStackTrace();
          } catch (ExecutionException e) {
              showDialog("Errore ricerca");
              e.printStackTrace();
          }              
      } else{
          showDialog("Inserisci un piatto");
      }
  }
};
下面是正在调用的AsyncTask:

private class QueryWinesTask 
extends AsyncTask<Void, Void, CollectionResponseWine> {
  Exception exceptionThrown = null;
  MessageEndpoint messageEndpoint;
  String cname;
  Integer limit;

  public QueryWinesTask(MessageEndpoint messageEndpoint, String cname, Integer limit) {
      this.messageEndpoint = messageEndpoint;
      this.cname=cname;
      this.limit=limit;
  }

  @Override
  protected CollectionResponseWine doInBackground(Void... params) {
      try {
          CollectionResponseWine wines = messageEndpoint.listwines().setCoursename(cname).setLimit(limit).execute();                    
          return wines;
      } catch (IOException e) {
          exceptionThrown = e;
          return null;
          //Handle exception in PostExecute
      }            
  }

  protected void onPostExecute(CollectionResponseWine wines) {
      // Check if exception was thrown
      if (exceptionThrown != null) {
          Log.e(RegisterActivity.class.getName(), 
                  "Exception when listing Messages", exceptionThrown);
          showDialog("Non ci sono vini associati al tuo piatto. Aggiungine uno!");
      }
      else {

          messageView.setText("Vini piu' votati per " + 
                  cname + ":\n\n");
          for(Wine wine : wines.getItems()) {
              messageView.append(wine.getName() + " (" + wine.getScore() + ")\n");
          }
      }
  }  
}
专用类QueryWinesTask
扩展异步任务{
异常exceptionThrown=null;
MessageEndpoint MessageEndpoint;
字符串cname;
整数极限;
公共QueryWinesTask(MessageEndpoint MessageEndpoint,字符串cname,整数限制){
this.messageEndpoint=messageEndpoint;
this.cname=cname;
这个。极限=极限;
}
@凌驾
受保护的CollectionResponseWine doInBackground(无效…参数){
试一试{
CollectionResponseWines=messageEndpoint.listwines().setCoursename(cname).setLimit(limit).execute();
返酒;
}捕获(IOE异常){
例外情况Rown=e;
返回null;
//在PostExecute中处理异常
}            
}
后期执行时受保护的无效(CollectionResponseWine){
//检查是否引发了异常
如果(exceptionThrown!=null){
Log.e(RegisterActivity.class.getName(),
“列出消息时出现异常”,exceptionThrown);
showDialog(“非ci sono vini association al tuo piatto.Aggiungine uno!”);
}
否则{
messageView.setText(“Vini piu'votati per”+
cname+“:\n\n”);
for(Wine:wines.getItems()){
messageView.append(wine.getName()+“(“+wine.getScore()+”)\n”);
}
}
}  
}
执行().get()
正在阻塞。它使UI线程等待任务完成

不要执行
get()
。使用
onPostExecute()
获取任务的结果(
wines
)并更新UI。

…execute()。get()
正在阻塞。它使UI线程等待任务完成

不要执行
get()
。使用
onPostExecute()
获取任务的结果(
wines
),并更新UI