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