2016-04-21 1 views
-2

Я использую этот класс asynctask для обновления двух разных таблиц на сервере Sql, пока этот код работает отлично. Я заинтересован в более лучшей и достаточной структуре кода этого класса специально в doinbackground(). вызывать несколько методов webservices в одном потоке? может ли кто-нибудь предложить мне?Async Задача с несколькими запросами в android

 private class Update extends AsyncTask<Void, Void, Integer> { 
     private final int FAILED_INVALID_RESPONSE = 0; 
     private final int SUCCESS_GET_DATA = 1; 
     ProgressDialog progress; 
     private String _phoneno; 
     private String _ticket; 
     UpdateTicket(String phoneno,String ticket){ 
      _phoneno=phoneno; 
      _ticket=ticket; 
     } 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      progress = ProgressDialog.show(XYZ.this, "", 
        "In Progress...", false); 
     } 

     @Override 
     protected Integer doInBackground(Void... params) { 
      method1(_phoneno); 
      return method2(_phoneno,_ticket); 
     } 
     @Override 
     protected void onPostExecute(Integer result) { 
      progress.dismiss(); 
      switch (result) { 
       case FAILED_INVALID_RESPONSE: 
        Toast.makeText(XYZ.this,"Please Check your Internet Connection.",Toast.LENGTH_SHORT).show(); 
        break; 
       case SUCCESS_GET_DATA: 
        Toast.makeText(XYZ.this, "Success!", Toast.LENGTH_SHORT).show(); 
        break; 
      } 
     } 
     int method1(String phoneno,String tickets) 
     { 
      final String methodname = "firstmethod"; 
      final String NAMESPACE ="http://tempuri.org/"; 
      final String URL="www.sampleurl.com"; 
      final String SOAP_ACTION="http://tempuri.org/firstmethod"; 
      int success=0; 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
      SoapObject request = new SoapObject(NAMESPACE, methodname); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.dotNet = true; 
      request.addProperty("phoneno", phoneno); 
      request.addProperty("tickets", tickets); 
      envelope.setOutputSoapObject(request); 

      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
      try{ 
       androidHttpTransport.call(SOAP_ACTION,envelope); 
       SoapObject response = (SoapObject) envelope.bodyIn; 
      if(response!=null){ 
       success=1; 
      } 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 

      } 

      return success; 
     } 
     int method2(String Phone) { 
      final String methodname = "secondmethod"; 
      final String NAMESPACE ="http://tempuri.org/"; 
      final String URL="www.sampleurl.com"; 
      final String SOAP_ACTION="http://tempuri.org/secondmethod"; 
      int success=0; 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
      SoapObject request = new SoapObject(NAMESPACE, methodname); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.dotNet = true; 
      request.addProperty("phoneno", phoneno); 
      envelope.setOutputSoapObject(request); 
      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
      try{ 
       androidHttpTransport.call(SOAP_ACTION,envelope); 
       SoapObject response = (SoapObject) envelope.bodyIn; 
      if(response!=null){ 
       success=1; 
      } 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 

      } 

      return success; 
     } 



    } 
+0

Это звучит как хороший вопрос для [Обзор кода] (https://codereview.stackexchange.com/). Это еще один домен в сети StackExchange, специально разработанный для того, чтобы программисты могли публиковать свой код и получать отзывы о том, как он выглядит, как он работает и т. Д. Обязательно прочитайте их [руководство по заданию вопросов] (http: //meta.codereview .stackexchange.com/questions/2436/how-to-get-the-best-value-out-of-code-review-questions-questions), прежде чем размещать свой вопрос там. Кроме того, если вы решите, что хотите задать свой вопрос в обзоре кода, обязательно закройте этот вопрос. Благодаря! –

ответ

1

AsyncTask следует использовать только для задач/операций, которые занимают довольно много секунд.

AsyncTasks выполняются последовательно на одной фоновой нити (из API 11). Так долго работающий может блокировать других.

Проверьте некоторые другие gotchas.

Взгляните на HeandlerThread.