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 第一次像魅力一样执行,我收到了来自服务器的响应,但是当我第二次尝试将 JSONArray 发送到服务器时,AsyncTask 没有执行。

我在 logcat 中没有收到任何异常或错误。

4

3 回答 3

6

创建异步任务的单独实例并尝试像这样执行..

 new MyAsyncTask().execute(params);

因为Asynctask 只能执行一次(如果尝试第二次执行会抛出异常)

于 2012-04-17T14:15:51.543 回答
2

您不能多次运行 AsyncTask。为每次运行创建一个单独的实例。

于 2012-04-17T14:31:51.417 回答
1

AsyncTask 只能执行一次。确保您没有错过控制台中抛出的异常。我查看了实际执行的方法的源代码并将其粘贴在下面。如您所见,当您尝试第二次执行它时将引发异常。

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 回答