在android中多次在A sync Task中调用HTTP

时间:2013-01-01 13:46:16

标签: android http android-asynctask queue

我想通过按钮点击http发送一些数据,每次用户点击按钮时,一些数据应该被添加到队列然后它将通过http发送,在获得响应后我想删除它从队列中然后对队列中的下一个项目做同样的事情。

我知道如何将项添加到队列中,我尝试使用Async任务来调用http。 如果用户在按钮上多次单击该问题,我怎样才能确保在完成第一个项目的http之前不会调用队列中的下一个项目。 如果应用程序也在后台,我希望操作完成。

这是doInBackground方法中的异步代码:

@Override
protected Boolean doInBackground(Void... params) {
 try {
 msgResponseIS = getInputStream(generatedLink);
 } catch (IOException e) {
  // TODO Auto-generated catch block
 e.printStackTrace();
 }
 if (msgResponseIS != null){


      BufferedReader r = new BufferedReader(new InputStreamReader(
       msgResponseIS));
      StringBuilder total = new StringBuilder();
      String line;
      try {
          while ((line = r.readLine()) != null) {
       total.append(line);
          }

          setResponseValue(total.toString());

      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }


     return true;}
     else
     return false;
      }

2 个答案:

答案 0 :(得分:0)

当请求被调用时执行myButton.setEnabled(false);,当http请求完成时,您可以执行

  

myButton.setEnabled(true);

其中myButton是调用异步任务的按钮。这样,只要异步任务运行,您就可以确保用户无法使用此按钮。

编辑:其他方式是制作boolean free = ture;标志。单击按钮时,只需将标志设置为free = false;并进行检查。如果该标志为真,则可以进行http调用,否则无法进行。

答案 1 :(得分:0)

1.在preExecute函数中,您可以像这样设置可点击的属性。
 Button.setClickable(假)
2.调用doInBackground后,调用post execute方法并将clickable设置为true。
 Button.setClickable(真);