0

私はAndroidプログラミングが初めてで、KSOAP2を使用してWebサービスにデータを送信しようとしました。しかし、値を送信したり、データを取得したりすることはできません。デバッグ モードでは、エラーは表示されません。Android 4.1エミュレーターを使用しています。しかし、結果やエラーが見つかりません。誰かがプログラムのバグを修正できますか

ここに画像の説明を入力

そして、私のJavaプログラムを以下に示します。

package com.example.webservice;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class WebService extends Activity {
       private final String NAMESPACE = "http://tempuri.org/";
       private final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?wsdl";
       private final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
       private final String METHOD_NAME = "CelsiusToFahrenheit";
    String celsius="";

       Button b;
    TextView tv;
    EditText et;
    String res,resultval;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_service);
        et=(EditText)findViewById(R.id.editText1);
        tv=(TextView)findViewById(R.id.Result);
        b=(Button)findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            //String result=getFarenheit(et.getText().toString());
            //tv.setText(result+"°F");
            new service().execute();
            }
        });
    }
    private class service extends AsyncTask<Void, Void, String>{

        @Override
        protected String doInBackground(Void... arg0) {

            SoapObject request= new SoapObject(NAMESPACE, METHOD_NAME);
            PropertyInfo celsuiusPI= new PropertyInfo();
            celsuiusPI.setName("Celsius");
            celsuiusPI.setValue(celsius);
            celsuiusPI.setType(String.class);
            request.addProperty(celsuiusPI);
            SoapSerializationEnvelope envelope=new SoapSerializationEnvelope (SoapEnvelope.VER11);
            envelope.dotNet=true;
            envelope.implicitTypes = true;
            envelope.enc = SoapSerializationEnvelope.ENC2003;
            envelope.xsd = SoapEnvelope.XSD;
            envelope.xsi = SoapEnvelope.XSI;
            envelope.setOutputSoapObject(request);
            envelope.setAddAdornments(false);
            envelope.setOutputSoapObject(request);
            HttpTransportSE androidHttpTransport=new HttpTransportSE(URL);
            try{
                androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
                androidHttpTransport.debug = true;
                androidHttpTransport.call(SOAP_ACTION, envelope);
                final SoapPrimitive response=(SoapPrimitive)envelope.getResponse();
                Toast.makeText(WebService.this, response.toString(), 20).show();
                Log.i("WebService output", response.toString());
                Object res= response.toString();
                resultval=(String) res;
            }
            catch(Exception e){
                e.printStackTrace();
            }

            return res;

        }
         protected void onPostExecute(String h){
             String result=h;
                tv.setText(result+"°F");

    }


}
}

上記のプログラムは、テキスト値を整数として送信し、摂氏/華氏の出力を受け取ります。プログラマーに感謝します。コードを編集しましたが、null 値を受け取りました。私の疑いは、プロキシサーバーがアンドロイドエミュレーターからのデータの送受信をブロックしているかどうかに関係なく、プロキシを使用していることです

4

3 に答える 3

0

整数値ではなく文字列値を送信する必要があり、次のように送信できます

PropertyInfo pi = new PropertyInfo();
    pi.setName("Celsius");  

    pi.setValue("22");
    pi.setType(String.class);
    request.addProperty(pi);(//request is soap object )
于 2012-11-14T05:59:28.610 に答える
0

この種のコードを使用できます。

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pi = new PropertyInfo();
pi.setName("Celsius");  
pi.setValue("22");
pi.setType(String.class);
request.addProperty(pi);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
Object result = envelope.getResponse();
于 2012-11-16T02:59:19.123 に答える
0

ksoap を使用した Web サービスを理解するには、このリンクの例を練習する必要があります。 http://android-helper.blogspot.in/2012/04/accessing-webservices-using-soap.html . ご不明な点がございましたらお知らせください。

于 2012-11-14T07:11:34.730 に答える