【问题标题】:android - parse dotnet webservice every few secondsandroid - 每隔几秒解析一次 dotnet webservice
【发布时间】: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


【解决方案1】:

我发现我每次都在类的顶部实例化任务并从同一个实例调用执行,但是如果我每次想调用任务时都将任务设为新的,它就像一个魅力

【讨论】:

    猜你喜欢
    • 2018-09-05
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2019-11-25
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多