2017-06-03 2 views
0

Ich habe zwei Methoden, die von Seife Webservice sind. Ich rufe sie in asyntask, das ist eine Oberklasse von info.java Seite und tring, um die Ergebnisse in onPost Methode asyntask zu erhalten. Der aufrufende Code von info.java/onCreate ist unten.Wie kann ich zwei Web-Service-Methoden in derselben Aktivität verwenden?

 try{ 
     PropertyInfo propertyInfo1 = new PropertyInfo(); 
     properties.clear(); 

     propertyInfo1 = new PropertyInfo(); 
     propertyInfo1.setName("Module_id"); 
     propertyInfo1.setType(String.class); 
     propertyInfo1.setValue(Utils.selectedModule_id); 
     properties.add(propertyInfo1); 

     new Info.AsyncTaskService().execute(new ServiceParams("GetInfo", properties), new ServiceParams("GetInfo_Photo", properties)); 

    } catch (Exception e) { 
     Toast.makeText(Info.this, "Please check your internet connection.", Toast.LENGTH_LONG); 
    } 

Beide Service-Methoden haben die gleichen Eigenschaften, weshalb ich ihnen die gleichen Eigenschaften gegeben habe. Mein Problem ist, dass ich die Ergebnisse nicht nehmen kann, weil ich weiß, dass es diese zwei Methoden in verschiedenen Threads mit einer Reihenfolge aufrufen muss, aber ich weiß nicht, wie es geht. Kannst du mir bitte helfen? Die Codes der asynctask Klasse sind auch unten danke.

public class AsyncTaskService extends AsyncTask<ServiceParams, Void, Void> { 
    String resp = ""; 
    String resp2 = ""; 
    ProgressDialog progressDialog; 

    @Override 
    protected Void doInBackground(ServiceParams... params) { 
     resp = WebService.invoke(params[0].properties, params[0].methodName); 
     resp2 = WebService.invoke(params[1].properties, params[1].methodName); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     Log.w("WEBSERVICE RESPONSE===", resp); 

     Log.w("WEBSERVICE RESPONSE===", resp2); 
     try { 
      JSONArray ja = new JSONArray(resp); 
      Utils.subMenuArrayList.clear(); 
      Info_Item info_item=new Info_Item(ja.getJSONObject(0)); 
      ((TextView)findViewById(R.id.txtInfo)).setText(info_item.getInfo()); 
      ((TextView)findViewById(R.id.txtModule)).setText(Utils.selectedMenuName); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     if (progressDialog != null) 
      progressDialog.dismiss(); 
    } 
    @Override 
    protected void onPreExecute() { 

     progressDialog = new ProgressDialog(Info.this); 
     if (progressDialog != null) { 
      progressDialog.setCancelable(false); 
      progressDialog.setMessage("İşlem yapılıyor ..."); 
      progressDialog.show(); 
     } 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     if (progressDialog != null) 
      progressDialog.setProgress(progress[0]); 
    } 

} 

Antwort

0

Ich habe gefunden, wie es geht! Wollte auch mit dir teilen.

Zunächst beschreiben Sie async Aufgaben wie unten. Ich habe zwei Methoden, die ich in einer Tätigkeit gleichzeitig verwenden möchte (paralel), also beschrieb ich zwei async Aufgabenklassen.

public class FirstAsyncTask extends AsyncTask<ServiceParams, Void, Void> { 
    String resp = ""; 
    ProgressDialog progressDialog; 

    @Override 
    protected Void doInBackground(ServiceParams... params) { 
     resp = WebService.invoke(params[0].properties, params[0].methodName); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     Log.w("WEBSERVICE RESPONSE===", resp); 

     try { 
      JSONArray ja = new JSONArray(resp); 
      Utils.subMenuArrayList.clear(); 
      Info_Item info_item=new Info_Item(ja.getJSONObject(0)); 
      ((TextView)findViewById(R.id.txtInfo)).setText(info_item.getInfo()); 
      ((TextView)findViewById(R.id.txtModule)).setText(Utils.selectedMenuName); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     if (progressDialog != null) 
      progressDialog.dismiss(); 
    } 

    @Override 
    protected void onPreExecute() { 

     progressDialog = new ProgressDialog(Info.this); 
     if (progressDialog != null) { 
      progressDialog.setCancelable(false); 
      progressDialog.setMessage("İşlem yapılıyor ..."); 
      progressDialog.show(); 
     } 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     if (progressDialog != null) 
      progressDialog.setProgress(progress[0]); 
    } 

} 

Dann sollten Sie die Aufgaben wie diese mit executeOnExecuter rufen in onCreate Methode ist Ihre Aktivität. Ich habe hier ein Eigenschaftsfeld verwendet, um die Parameter zu speichern, die ich an die Web-Service-Methode senden werde, und einen Serviceparameter mit Eigenschaften und Methodennamen beschreiben und sie in der executeOnExecuter() -Methode senden. Ich habe dieselben Eigenschaften für meine beiden Web-Service-Methoden verwendet, aber Sie können ein anderes Eigenschafts-Array wie dieses beschreiben "private ArrayList properties = new ArrayList <>();" und fügen Sie Informationen hinzu, die Sie für Parameter benötigen, die Sie an die Web-Service-Methode senden.

try{ 
     PropertyInfo propertyInfo1 = new PropertyInfo(); 
     properties.clear(); 

     propertyInfo1 = new PropertyInfo(); 
     propertyInfo1.setName("Module_id"); 
     propertyInfo1.setType(String.class); 
     propertyInfo1.setValue(Utils.selectedModule_id); 
     properties.add(propertyInfo1); 

     ServiceParams serviceparams=new ServiceParams("GetInfo", properties); 
     ServiceParams serviceparams2=new ServiceParams("GetInfo_Photo", properties); 

     FirstAsyncTask asyncTask = new FirstAsyncTask(); // First 
     asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, serviceparams); 
     SecondAsyncTask asyncTask2 = new SecondAsyncTask(); // Second 
     asyncTask2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, serviceparams2); 

    } catch (Exception e) { 
     Toast.makeText(Info.this, "Please check your internet connection.", Toast.LENGTH_LONG); 
    } 
Verwandte Themen