2

I'm new to ksoap2 and I'm trying to get example w3 schools example working. For some reason it always fails on this line.

SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);

I dont know what is causing the fail. The android app just blows up. I have set internet permisions in Manifest. Im not really sure what is going on. Thanks

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;
public class WebServiceTurorialActivity extends Activity implements OnClickListener{

private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
private static final String METHOD_NAME = "CelsiusToFahrenheit";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    (findViewById(R.id.button1)).setOnClickListener(this);
}


public void onClick(View v) {
    int a;
    int b;
    try
    { 
        // EditText ed1=(EditText)findViewById(R.id.editText1);
        // EditText ed2=(EditText)findViewById(R.id.editText2); 
        // a = Integer.parseInt(ed1.getText().toString());
        // b = Integer.parseInt(ed2.getText().toString()); 

         SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
         //Request.addProperty("a", a);
        // Request.addProperty("b", b);
         Request.addProperty("Celsius", "32");

         SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
         soapEnvelope.dotNet = true;
         soapEnvelope.setOutputSoapObject(Request);

         HttpTransportSE transport= new HttpTransportSE(URL);

         transport.call(SOAP_ACTION, soapEnvelope);
         SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();

         Toast.makeText(this,"200 " + resultString,Toast.LENGTH_SHORT).show();

     }catch(Exception ex) {
         Toast.makeText(this,"FALSE",Toast.LENGTH_SHORT).show();
     }
} 

}

4

5 回答 5

4

我有同样的问题。这对我行得通:

正如上一个答案所说:

  • 在您的构建路径中清除所有库(jar 文件)。
  • 在项目的主目录中创建一个文件夹并将其命名为“libs”(不是“lib”)。
  • 现在 Eclipse ADT 插件会将您的 jar 文件添加到构建路径

对我来说不是真的。我的方式:

  1. 在您的构建路径中删除“ksoap2-android-assembly-2.xx-jar-with-dependencies.jar”
  2. 单击确定(显示的忽略错误)
  3. 在项目的主目录中创建一个文件夹“libs”
  4. 将 JAR 文件复制到此目录 (!)
  5. 在您的构建路径中添加具有此目录的 JAR 文件
于 2012-05-02T20:49:49.643 回答
3

对于每个也有这个问题的人......我试图解决这个问题很多小时,但后来我发现我的错误是:我没有正确下载 ksoap2 库,所以只有一个 21 KB 的 jar 文件,但正确的jar文件大约是150KB。因此,请确保正确下载文件!

于 2012-10-22T22:17:10.787 回答
1
  • 在您的构建路径中清除所有库(jar 文件)。
  • 在项目的主目录中创建一个文件夹并将其命名为“libs”(不是“lib”)。
  • 现在 Eclipse ADT 插件会将您的 jar 文件添加到构建路径。
  • 快乐编码

如果您仍然遇到同样的问题,请尝试这些课程(对我有用):

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String fahrenheit = CelsiusToFahrenheitWs.celsiusToFahrenheit("32");
        Toast.makeText(getApplicationContext(), fahrenheit, Toast.LENGTH_SHORT).show();
    }
}

public class CelsiusToFahrenheitWs {
    private static final String METHOD_NAME = "CelsiusToFahrenheit";
    private static final String NAMESPACE = "http://tempuri.org/";
    private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
    private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";

    public static String celsiusToFahrenheit(String celsius) {
        String fahrenheit = null;

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty("Celsius", celsius);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);

        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        androidHttpTransport.debug = true;

        try {
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
            fahrenheit = response.toString();
        } catch (Exception e) {
            e.printStackTrace();
            fahrenheit = null;
        }
        return fahrenheit;
    }
}
于 2012-04-26T07:50:39.330 回答
1

我创建了另一个 SOAP 库来调用 Android 上的 SOAP 服务,该项目的名称是 AndroidSOAP ( http://wiki.javaforum.hu/display/ANDROIDSOAP/Home )。

我今天发布了 0.0.5 版本,请查看:http ://wiki.javaforum.hu/display/ANDROIDSOAP/2012/05/01/Version+0.0.5+released

于 2012-05-01T15:24:07.770 回答
0

W3Schools.com 不再接受 NAMESPACE 作为 tempuri.org 导致代码中的 SOAP 异常。您需要对 NAMESPACE使用“ http://www.w3schools.com/webservices/ ”,对 SOAP_ACTION使用“ http://www.w3schools.com/webservices/CelsiusToFahrenheit ”。

希望这是帮助!

于 2013-12-30T17:19:23.883 回答