我有一个 Web 服务类来调用我的 Web 方法。但这必须在 AsyncTask 类中调用。目前,我的所有活动中都有一个 AsyncTask 类来调用我的 Web 服务方法。是否可以将它们混合在一起(Web 服务类和 AsyncTask)以拥有一个 Web 服务类,该类采用 Web 方法的名称并在执行后返回结果?
这是我的网络服务类:
package ClassLibrary;
public class WebService {
    private String namespace="";
    private String url="";
    public WebService(String namespace,String url) {
        super();
        this.namespace = namespace;
        this.url = url;
    }
    public String CallMethod(String methodName,PropertyInfo pi) {
        String result = "default";
        SoapObject request = new SoapObject(namespace, methodName);
        request.addProperty(pi);
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(url);
        try {
            androidHttpTransport.call(namespace+methodName, envelope);
            SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
            result= response.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}
这就是我在 AsyncTask 中访问的方式:
private class AsyncCallWS extends AsyncTask<String, Void, Void> {
    private ProgressDialog dialog;
    private Activity activity;
    public String wsOutput="";
    public String methodName="";
    private WebService ws;
    public AsyncCallWS(Activity activity,String methodName) {
        this.activity = activity;
        this.dialog = new ProgressDialog(activity);
        this.methodName = methodName;
    }
    @Override
    protected Void doInBackground(String... params) {
        ws = new WebService(PublicVariable.NAMESPACE, PublicVariable.URL);
        PropertyInfo pi= new PropertyInfo();
        pi.setName("UserID");
        pi.setValue("1");
        pi.setType(String.class);
        wsOutput=ws.CallMethod("GetPersonalInfo", pi);
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        if (this.dialog.isShowing()) {
            this.dialog.dismiss();
        }
        if (methodName == "GetPersonalInfo") {
            Log.d("Ehsan","OUTPUT IS:"+ wsOutput);
        }
    }
}