2

AsyncTask を拡張するクラスがあります

public class SendJSONArray2Server extends AsyncTask<String, Void, HttpResponse>

このクラスは JSONArray をサーバーに送信し、応答を JSONArray として受け取ります。次のようにクラスをインスタンス化しました

private SendJSONArray2Server sendJSON;
String[] params = { "http://10.0.2.2:8084/xyz/abc",jsonArray.toString() };
sendJSON.execute(params);

onPostExecute で、ユーザーの応答を処理します

@Override
protected void onPostExecute(HttpResponse response)

AsyncTask はチャームのように初めて実行され、サーバーから応答を受信して​​いますが、2 回目に JSONArray をサーバーに送信しようとすると、AsyncTask は実行されません。

logcat で例外やエラーが発生しません。

4

3 に答える 3

6

非同期タスクの別のインスタンスを作成し、このように実行してみてください..

 new MyAsyncTask().execute(params);

Asynctask は 1 回しか実行できないため (2 回目の実行を試みると例外がスローされます)

于 2012-04-17T14:15:51.543 に答える
2

AsyncTask を複数回実行することはできません。実行ごとに個別のインスタンスを作成します。

于 2012-04-17T14:31:51.417 に答える
1

AsyncTask は 1 回だけ実行できます。コンソールでスローされた例外を見逃していないことを確認してください。実際に実行するメソッドのソースコードを調べて、以下に貼り付けました。ご覧のとおり、2 回目に実行しようとすると例外がスローされます。

public final AsyncTask<Params, Progress, Result> executeOnExecutor(Executor exec,
        Params... params) {
    if (mStatus != Status.PENDING) {
        switch (mStatus) {
            case RUNNING:
                throw new IllegalStateException("Cannot execute task:"
                        + " the task is already running.");
            case FINISHED:
                throw new IllegalStateException("Cannot execute task:"
                        + " the task has already been executed "
                        + "(a task can be executed only once)");
        }
    }

    mStatus = Status.RUNNING;

    onPreExecute();

    mWorker.mParams = params;
    exec.execute(mFuture);

    return this;
}
于 2012-04-17T14:14:53.060 に答える