2016-08-09 3 views
0

数秒ごとにデータアンドロイドは - DOTNET Webサービスを解析し、私はいくつかのXMLデータ <p>私はWebサービスへの要求データを送信ASyncTaskクラスを構築し、それを提出する良い作品</p>を返すために、すべてのカップルの分を実行しますDOTNETのWebサービスを持っている

は、その後Webサービスは、データごとに2分は私がその応答データを取得するためにWebサービスにアクセスするための別のASyncTaskクラスを構築し、応答

を与えることを抽出し、私はタイマーで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; 
     } 
    }); 
} 
} 

と、私は10秒ごとまたはそう、このタスクを呼び出すためにカウントダウンタイマーを使用しています:

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) 
+0

"既に実行中"のメッセージは何ですか?あなたのアプリまたはあなたのいわゆるWebサービス? – muratgu

+0

私のアプリ、その致命的な例外を与える – buradd

+0

ルール#1:すべてのエラーメッセージを投稿してください。 – muratgu

答えて

0

私はクラスの最上部にタスクをインスタンス化し、その同じインスタンスから毎回実行呼んでいたことがわかったが、私はタスクが新たに作られた場合タスクを呼び出すたびに、それは魅力のように機能しました

関連する問題