1

ボタンのクリックで 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;
      }
4

2 に答える 2

0

リクエストが呼び出されたmyButton.setEnabled(false);とき、およびhttpリクエストが終了したときに実行できます

myButton.setEnabled(true);

myButton非同期タスクを呼び出すボタンはどこにありますか。このようにして、非同期タスクが実行されている限り、ユーザーがこのボタンを使用できないようにすることができます。

編集:他の方法は、boolean free = ture;フラグを作成することです。ボタンがクリックされたら、フラグを設定free = false;してチェックを行います。フラグが true の場合は http 呼び出しを行うことができ、それ以外の場合は行うことができません。

于 2013-01-01T13:53:11.640 に答える
0

1. preExecute 関数では、次のようにクリック可能なプロパティを設定できます。
Button.setClickable(false)
2. doInBackground を呼び出した後、post execute メソッドを呼び出し、クリッカブルを true に設定します。
Button.setClickable(真);

于 2013-01-01T13:55:49.947 に答える