2016-08-09 4 views
0

У меня есть Dotnet WebService, который работает через каждые несколько минут, чтобы вернуть некоторые данные XMLандроида - разбор Dotnet WebService каждые несколько секунд

Я построил класс AsyncTask, который отправляет данные запроса на веб-сервис, и она работает хорошо, подать данные

Затем вебсервис извлекает, что данные каждые 2 минуты, чтобы дать ответ

я построил еще один класс 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; 
     } 
    }); 
} 
} 

и я использую таймер обратного отсчета, чтобы назвать эту задачу каждые десять секунд или около того:

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

Что такое сообщение «уже работает»? ваше приложение или ваш так называемый 'webservice'? – muratgu

+0

Мое приложение, дающее фатальное исключение – buradd

+0

правило № 1: опубликуйте сообщение об ошибке, все это. – muratgu

ответ

0

я обнаружил, что я был инстанцированием задачи в верхней части класса и призывая выполнить из того же экземпляра каждый раз, но если бы я сделал задачу новой каждый раз, когда я хотел вызвать задачу, она работала как шарм

Смежные вопросы