Android AsyncTask在第二次调用时不执行

时间:2012-04-17 14:12:10

标签: android json android-asynctask

我有一个扩展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中收到任何异常或错误。

3 个答案:

答案 0 :(得分:6)

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

 new MyAsyncTask().execute(params);

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

答案 1 :(得分:2)

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

答案 2 :(得分: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;
}