2
  1. このコードはエラーや警告を表示していませんが、正しく機能していません。どこに問題があるのか​​わかりません。助けてください。

    package com.example.webtest;
    
    import org.ksoap2.SoapEnvelope;
    import android.util.Log;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapPrimitive;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
    String UserFahrenheit;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    Button b=(Button) findViewById(R.id.button);
    final EditText Med=(EditText) findViewById(R.id.MedServTextView);
    final TextView Test=(TextView) findViewById(R.id.TestTextView);
    
    b.setOnClickListener(new View.OnClickListener() {
    
        @Override
        public void onClick(View v) {
            //try{
                UserFahrenheit=Med.getText().toString();
    
                //String mobile=getData(UserMRN.trim());
                 String NAMESPACE = "http://tempuri.org/";
                    String METHOD_NAME = "FahrenheitToCelsius";
                    String SOAP_ACTION = "http://tempuri.org/FahrenheitToCelsius";
                    String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";
    
                    SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
    
                    Request.addProperty("Fahrenheit",UserFahrenheit.trim());
    
                    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                            SoapEnvelope.VER11);
                    envelope.dotNet = true;
                    envelope.setOutputSoapObject(Request);
    
                    HttpTransportSE androidHttpTransport = new HttpTransportSE(
                            URL);
        try{
                    androidHttpTransport.call(SOAP_ACTION, envelope);
    
                    SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
                    String Celsius;
                    Celsius= String.valueOf(response.toString());
                   Test.setText(Celsius);
    
        }catch(Exception e){
            e.getMessage();
        }
    
    
    
        //  }catch(Exception e){
        //      e.getMessage();
        //  }
    
    
        }
    });
    
        }
    
    
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }
    
    }
    
4

1 に答える 1

1

なぜ SoapPrimitive を使用しているのですか? まず、応答がエラーになっているかどうかを確認します。それ以外の場合は、response.bodyIn を呼び出して、応答オブジェクトから応答本文を取得します。

SoapObject response = null;
if (envelope.bodyIn instanceof SoapObject) { // SoapObject = SUCCESS
    response = (SoapObject) envelope.bodyIn;
} else if (envelope.bodyIn instanceof SoapFault) { // SoapFault =
                                                    // FAILURE
    SoapFault soapFault = (SoapFault) envelope.bodyIn;
    throw new Exception(soapFault.getMessage());
}

次に、たとえば response.getProperty("responsecode") を呼び出して、応答からプロパティを取得できます。

また、デバッグ中に HttpTransportSE のデバッグ値を true に設定します。

transportSE.debug = true;
于 2013-06-15T11:34:36.843 に答える