0

Web サービス メソッドにアクセスするように設計されたクラスがあります。問題は、非同期呼び出しで 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;
    }
}

これが私がWebサービスを呼び出そうとしている方法です:

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

1 に答える 1

1

非同期タスクで使用される 3 つのタイプは次のとおりです。

  • Params、実行時にタスクに送信されるパラメーターのタイプ。

  • 進行状況、バックグラウンド計算中に発行された進行状況単位のタイプ。

  • 結果、バックグラウンド計算の結果の型。

onPostExecute(Result)は、バックグラウンド計算が終了した後に UI スレッドで呼び出されます。バックグラウンド計算の結果はパラメーターとしてこのステップに渡され、結果の値は渡されません。

private class AsyncCallWS extends AsyncTask<String, Void, String> {

    private ProgressDialog dialog;
    private Activity activity;
    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);

        String wsOutput = ws.CallMethod("GetPersonalInfo", pi);

        return wsOutput;
    }

    @Override
    protected void onPostExecute(String result) {

        if (this.dialog.isShowing()) {
            this.dialog.dismiss();
        }

        Log.d("Ehsan","OUTPUT IS:"+ result);
    }
}
于 2013-10-30T10:02:46.767 に答える