0

ksoap2 を使用して Android から .net Web サービスに接続しようとしていますが、null の出力が表示され"null°F"ます。以下のログ ファイルを見つけて、これをクリアするのを手伝ってください。Web サービスから KSOAP を使用します

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.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class WebService extends Activity {
       private final String NAMESPACE = "http://tempuri.org/";
       private final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";
       private final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
       private final String METHOD_NAME = "CelsiusToFahrenheit";
    Button b;
    TextView tv;
    EditText et;

    @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");
            }
        });
    }
    public String getFarenheit(String celsius){
        SoapObject request= new SoapObject(NAMESPACE, METHOD_NAME);
        PropertyInfo celsuiusPI= new PropertyInfo();
        celsuiusPI.setName("Celsius");
        celsuiusPI.setValue(celsius);
        celsuiusPI.setType(double.class);
        request.addProperty(celsuiusPI);
        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();
            Log.i("WebService output", response.toString());
            return response.toString();

        }
        catch(Exception e){
            e.printStackTrace();
        }
        //return null;
        return null;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_web_service, menu);
        return true;
    }

}

誰かが私のプログラムの欠点を教えてもらえますか

4

2 に答える 2

1

nullポインター例外は、一般的な方法であり、より多くのデバッグ情報を指定/提供する必要があります。また、URLが間違っている可能性があります?wsdl。最後に追加してみてください。

于 2012-11-08T13:40:20.827 に答える
0

asynctask クラス定義に String 入力があります。しかし、その文字列を asynctask クラスに与えていません。双方向:

1-定義から文字列パラメータを削除

public class servicecall extends AsyncTask<String,Void,String>

| |

| |

 public class servicecall extends AsyncTask<Void,Void,String>

2-asynctask クラスに文字列を与える

new servicecall().execute("Some string");
于 2012-11-08T14:18:43.070 に答える