【问题标题】:How to connect to web service with android application project using ksoap2?如何使用 ksoap2 连接到带有 android 应用程序项目的 Web 服务?
【发布时间】:2012-10-10 13:21:57
【问题描述】:

我遇到了关于如何使用 ksoap2 连接到 Web 服务的问题 我的代码:

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

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.*;
import org.ksoap2.transport.HttpTransportSE;
import android.widget.TextView;


public class FirstScreen extends Activity {

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";
TextView tv;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first_screen);
    tv= (TextView)findViewById(R.id.TextView01);

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

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

    HttpTransportSE bah = new HttpTransportSE(URL);

    try
    {
        bah.call(SOAP_ACTION, soapEnvelope);
        SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
        tv.setText("status: "  + resultString);

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

}

}

它说应用程序 MyTest(进程 com.falafel.mytest))已意外停止! :(

我的错误:

10-10 13:14:06.690: E/dalvikvm(279): Could not find class  'org.ksoap2.serialization.SoapObject', referenced from method com.falafel.mytest.FirstScreen.onCreate
10-10 13:14:06.690: W/dalvikvm(279): VFY: unable to resolve new-instance 501 (Lorg/ksoap2/serialization/SoapObject;) in Lcom/falafel/mytest/FirstScreen;
10-10 13:14:06.690: D/dalvikvm(279): VFY: replacing opcode 0x22 at 0x0012
10-10 13:14:06.690: D/dalvikvm(279): VFY: dead code 0x0014-005a in Lcom/falafel/mytest/FirstScreen;.onCreate (Landroid/os/Bundle;)V
10-10 13:14:06.870: W/Resources(279): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f070000}
10-10 13:14:06.890: D/AndroidRuntime(279): Shutting down VM
10-10 13:14:06.890: W/dalvikvm(279): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
10-10 13:14:06.920: E/AndroidRuntime(279): FATAL EXCEPTION: main
10-10 13:14:06.920: E/AndroidRuntime(279): java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject
10-10 13:14:06.920: E/AndroidRuntime(279):  at com.falafel.mytest.FirstScreen.onCreate(FirstScreen.java:32)
10-10 13:14:06.920: E/AndroidRuntime(279):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-10 13:14:06.920: E/AndroidRuntime(279):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
10-10 13:14:06.920: E/AndroidRuntime(279):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
10-10 13:14:06.920: E/AndroidRuntime(279):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-10 13:14:06.920: E/AndroidRuntime(279):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-10 13:14:06.920: E/AndroidRuntime(279):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-10 13:14:06.920: E/AndroidRuntime(279):  at android.os.Looper.loop(Looper.java:123)
10-10 13:14:06.920: E/AndroidRuntime(279):  at android.app.ActivityThread.main(ActivityThread.java:4627)
10-10 13:14:06.920: E/AndroidRuntime(279):  at java.lang.reflect.Method.invokeNative(Native Method)
10-10 13:14:06.920: E/AndroidRuntime(279):  at java.lang.reflect.Method.invoke(Method.java:521)
10-10 13:14:06.920: E/AndroidRuntime(279):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-10 13:14:06.920: E/AndroidRuntime(279):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-10 13:14:06.920: E/AndroidRuntime(279):  at dalvik.system.NativeStart.main(Native Method)
 10-10 13:14:11.240: I/Process(279): Sending signal. PID: 279 SIG: 9

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 你甚至没有尝试... "java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject" + google ... 第一个结果 ...

标签: java android xml web-services ksoap2


【解决方案1】:

你做到了吗

Project > Properties > Java Build Path > Order and Export > 最后,勾选您导入的 KSOAP2 库。

另外,不要在 UI 线程上使用 web 服务,考虑使用服务或AsyncTask

【讨论】:

    【解决方案2】:

    在 Android 中使用 ksoap2 有时可能具有挑战性。正如 ThePCWizard 正确建议的那样,最好使用 AsyncTask 在后台线程上执行所有与网络相关的任务。

    您收到 java.lang.NoClassDefFoundError 可能表明您的 Android 项目无法识别 ksoap.jar

    假设您安装了最新的ADT version,您需要在您的Android 项目的libs 文件夹中添加.jar 文件。之后右键单击.jar 文件-->构建路径-->添加到构建路径

    清理您的项目并尝试运行该应用程序。它应该删除类定义未找到错误。

    很久以前我已经实现了一个类似的应用程序。这是link

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多