簡體   English   中英

如何在同一活動中使用兩種Web服務方法?

[英]How can i use two web service methods in the same activity?

我有兩種來自soap webservice的方法。 我在作為info.java頁面超類的asyntask中調用它們,並嘗試在asyntask的onPost方法中獲取結果。 下面是info.java/onCreate的調用代碼。

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

兩種服務方法都具有相同的屬性,這就是為什么我賦予它們相同的屬性。 我的問題是我無法獲得結果,因為我知道它需要按順序在不同的線程中調用這兩個方法,但是我不知道該怎么做。 請問你能幫幫我嗎? 異步任務類的代碼也在下面,謝謝。

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

}

我已經找到了怎么做! 也想與您分享。

首先,如下描述您的異步任務。 我想同時在一個活動中使用兩種方法(並行),因此我描述了兩個異步任務類。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM