【发布时间】:2016-08-09 18:07:12
【问题描述】:
我有一个 dotNet 网络服务,每隔几分钟运行一次以返回一些 xml 数据
我构建了一个 ASyncTask 类,将请求数据提交给 web 服务,提交数据效果很好
然后网络服务每 2 分钟提取一次数据以给出响应
我构建了另一个 ASyncTask 类来访问 web 服务以获取响应数据,但是当我在计时器上运行 ASyncTask 时,它会在应用程序第一次重试时崩溃,说任务已经在运行
public class GetPaymentsResult extends AsyncTask<Integer, Void, String>{
MainActivity mainActivity = MainActivity.getInstance();
public String SOAP_ACTION = "https://webservice/method";
public String METHOD_NAME = "method";
public String NAMESPACE = "https://webservice/";
public String URL = "https://webservice/payments.asmx";
private SoapObject request;
private HttpTransportSE httpTransport;
private SoapSerializationEnvelope envelope;
public Object response = null;
public static String resultinfo;
@Override
protected String doInBackground(Integer... params){
resultinfo = null;
request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pi = new PropertyInfo();
PropertyInfo pi2 = new PropertyInfo();
pi.setName("RequestID");
pi.setValue(010101);
pi.setType(Integer.class);
request.addProperty(pi);
pi2.setName("APIKey");
pi2.setValue("1234-1234-1234");
pi2.setType(String.class);
request.addProperty(pi2);
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
httpTransport = new HttpTransportSE(URL);
try{
httpTransport.call(SOAP_ACTION, envelope);
response = envelope.getResponse();
}catch(Exception e){
e.printStackTrace();
response = e.getMessage();
}
return response.toString();
}
@Override
protected void onPostExecute(final String result){
super.onPostExecute(result);
mainActivity.getHandler().post(new Runnable() {
@Override
public void run() {
System.out.println(result);
resultinfo = result;
}
});
}
}
我使用倒数计时器每隔十秒左右调用一次此任务:
public CountDownTimer timer(){
CountDownTimer times = new CountDownTimer(10000, 20) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
checkPaymentreturn();
}
}.start();
return times;
}
我确定我应该这样做的正确方法,有人可以帮忙吗?
这是我收到的错误:
**08-09 11:37:21.169 17098-17098/com.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app, PID: 17098
java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:579)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at com.app.ui.CitationFragment$1.onFinish(CitationFragment.java:179)
at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:127)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5944)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
【问题讨论】:
-
是什么给出了“已经运行”的消息?你的应用还是你所谓的
webservice? -
我的应用程序,它给出了一个致命的异常
-
规则#1:发布错误信息,全部发布。
-
我已经发布了异常
-
"webservice 每 2 分钟提取一次数据以给出响应" -- 所以你的 web 服务一旦被调用就永远不会停止?如果是这样,那么您的第一个电话永远不会结束,这就是您收到此异常的原因。
标签: java android web-services android-asynctask