2017-06-03 6 views
0

私はsoap webserviceからの2つの方法を持っています。私はasyntaskのonPostメソッドで結果を取得するためにinfo.javaページとtringのスーパークラスであるasyntaskでそれらを呼び出しています。 info.java/onCreateの呼び出しコードは以下の通りです。同じアクティビティで2つのWebサービスメソッドを使用するにはどうすればよいですか?

 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); 
    } 

どちらのサービスメソッドも、同じプロパティを指定した理由と同じプロパティをとります。私の問題は、私はそれが注文と別のスレッドでこれらの2つのメソッドを呼び出す必要があることを知っているので、私は結果を取ることができないですが、私はそれを行う方法を知らない。私を手伝ってくれますか? asynctaskクラスのコードも以下にあります。

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]); 
    } 

} 

答えて

0

私はそれを行う方法を見つけました!あなたとも分かち合おうと思った。

まず、以下のような非同期タスクについて説明します。私は同じアクティビティ(パラレル)で2つのメソッドを使いたいので、2つの非同期タスククラスについて説明しました。

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]); 
    } 

} 

次に、あなたの活動ののonCreateメソッドでexecuteOnExecuterでこのようなタスクを呼び出す必要があります。私はここでプロパティ配列を使用して、Webサービスメソッドに送信するパラメータを保持し、プロパティとメソッド名を持つserviceparameterを記述し、それらをexecuteOnExecuter()メソッドで送信します。私は両方のWebサービスメソッドに同じプロパティを使用しましたが、このような他のプロパティ配列を記述することができます "private ArrayList properties = new ArrayList <>();" Webサービスメソッドに送信するパラメータに必要な情報を追加します。

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); 
    } 
関連する問題