`
yellowxiaotian
  • 浏览: 9219 次
  • 性别: Icon_minigender_1
  • 来自: 潍坊
社区版块
存档分类
最新评论

android 调用 webservice 在eclipse中引入ksoap包程序运行时错误?

阅读更多

最近在学Android使用KSOAP2调用现有的Webservice的方法,期间在网上找了很多代码,但是每次在Android模拟器中运行的时候程序都会崩溃,搞得自己都快崩溃了。。。。

查看了一下LogCat中的错误报告,发现是因为java.lang.NoClassDefFoundError导致程序崩溃的:

ERROR/AndroidRuntime(600): java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject 
    at webservice.weather.WeatherActivity.getWeather(WeatherActivity.java:104) 
    at webservice.weather.WeatherActivity.showWeather(WeatherActivity.java:84) 
    at webservice.weather.WeatherActivity.access$0(WeatherActivity.java:80) 
    at webservice.weather.WeatherActivity$1.onClick(WeatherActivity.java:75) 
    at android.view.View.performClick(View.java:2408) 
    at android.view.View$PerformClick.run(View.java:8816) 
    at android.os.Handler.handleCallback(Handler.java:587) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:4627) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
    at dalvik.system.NativeStart.main(Native Method)

 

 

解决方法

 

找了很多资料,最后才发现是jar包的导入有问题。。。。以前开发java程序时导入jar包都是用一下的方法:

 

工程点击右键->Build Path->Add Libraries->User Library->选择包含需要的jar包的Library(如果没有的话就点击User Libraries新建一个Library,然后再选中)

 

但是,在Android中这样导入jar包会导致程序在模拟器中运行时抛出java.lang.NoClassDefFoundError异常,在Android中导入jar包的步骤如下:

 

工程点击右键->Build Path->Add External Archives->选择要导入的jar包

 

另外还有一个问题就是:Android模拟器访问Tomcat上部署的webservice程序时,不能用localhost或者本机IP,Android默认访问本机地址为10.0.2.2。

 

原因猜想

 

对于产生上述NoClassDefFoundError的原因,查看一下工程中的classpath文件就可以找到。如果是利用第一种方法导入的jar包的话,classpath文件中会生成这样一条语句:<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/KSOAP2"/>,这种导入jar包的方法依赖于开发环境eclipse;而如果用第二种方法导入jar包的话,会在classpath中产生如下的语句:

 

<classpathentry kind="lib" path="D:/JAVATOOLS/ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar"/>,这种导入方式是用的绝对路径,与eclipse开发环境无关,而且以这种方式导入后,jar包的信息会被加到工程class.dex中,进而会被打包到apk中。

 

我猜想,在运行虚拟机的时候,虚拟机是脱离了eclipse开发环境的,所以第一种依赖于eclipse环境的导入方式会出现上述错误;而第二种导入方式由于不依靠eclipse,将jar包的信息放到了class.dex中,所以运行无误!

 

如果这样还不行,试试这个方法:

建议ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar重命名为 ksoap.jar

通过外部倒入ksoap.jar文件

 

2、右击项目选择 properties-〉java build path ->order and export 在ksoap chekbox 中打上勾 点击OK

3、在项目bin文件夹下删除.apk文件重新运行程序即可

文章出处:

http://www.oschina.net/question/267845_48627

http://www.oschina.net/question/54100_34079

 

分享到:
评论

相关推荐

    在android中使用KSOAP2调用webservice

    总之,在Android中使用KSOAP2调用Web Service涉及了构建SOAP请求、设置参数、发送请求以及解析响应等多个环节。理解并熟练掌握这些步骤对于构建与服务器交互的应用至关重要。通过KSOAP2,开发者可以轻松地将Android...

    android调用webservice实现手机归属查询

    在Android中,可以使用`ksoap2-android`库来处理SOAP消息。 - 构建SOAP请求:定义请求的SOAP动作、命名空间、SOAP头和SOAP体。 - 发送请求:使用HTTP客户端将SOAP请求发送到Web Service的URL。 - 解析响应:接收...

    android调用webservice查询QQ在线状态

    在Android中,调用WebService主要有两种方式:使用Ksoap2库和使用HttpURLConnection。Ksoap2是一个流行的Android SOAP客户端库,简化了与SOAP服务交互的过程。如果你的Web Service基于SOAP,那么Ksoap2是一个很好的...

    android开发--使用ksoap2调用webservice借鉴.pdf

    然后,在Eclipse中引入这个jar包,使得项目能够使用其中的类和方法。 调用WebService的过程大致分为以下几个步骤: 1. 创建一个SoapObject实例,用于封装调用的WebService方法。你需要指定WebService的命名空间和...

    安卓调用webservice接口

    - 创建SOAP请求:在Android中,可以使用`Ksoap2`库来创建SOAP请求。首先添加依赖,然后创建一个`SoapObject`,设置命名空间和方法名。接着,为方法添加参数,构建`SoapSerializationEnvelope`,并设置版本和编码...

    使用KSOAP2调用WebService

    本文将详细介绍如何在Android应用中使用KSOAP2来调用WebService。 首先,为了在Android项目中使用KSOAP2,你需要下载并添加对应的jar文件。你可以从Google Code仓库...

    android开发--使用ksoap2调用webservice.pdf

    以上就是使用KSOAP2在Android中调用SOAP WebService的基本步骤。实际应用中,你可能还需要处理异常、进行数据类型转换以及优化性能等方面的工作。记得在实际项目中,务必测试各种可能的情况,确保服务调用的健壮性和...

    Android调用webservice 并传递实体类.docx

    在JVM上,程序执行的是.class文件,而在Android中,程序则运行于.dex格式的文件。在Eclipse开发Android应用时,所有依赖的.jar包中的.class文件都会在编译时被转换为.dex文件,以便能在Android设备上运行。如果将....

    axis2搭建webService并包含android调用此WebService服务案例

    1. 引入ksoap2-android.jar到Android项目的libs目录,并在构建路径中添加该库。 2. 创建HTTP连接和SOAP请求,将自定义类型的参数转换为字符串格式。 3. 发送SOAP请求到webService并解析返回的结果。 4. 处理返回数据...

    android ksoap2 3.6 webservice专用

    要在Android项目中使用KSOAP2,首先需要将对应的jar包(如ls-kosap.jar)添加到项目的libs目录下,然后在项目的build.gradle文件中将其添加到依赖项,或者通过Eclipse或Android Studio的类路径设置进行添加。...

    android开发--使用ksoap2调用webservice[借鉴].pdf

    在Android开发中,调用Web服务是常见的需求,尤其是当需要与服务器进行数据交互时。Web服务,特别是基于SOAP协议的WebService,允许不同平台和语言之间进行通信。然而,Android SDK本身并未提供直接调用WebService的...

    Android如何使用WebService接口.docx

    本篇将详细讲解如何在Android中使用KSOAP2库调用WebService接口。 首先,理解WebService的核心概念:它是一种基于SOAP(Simple Object Access Protocol)协议的远程调用标准,允许不同操作系统、编程语言和应用之间...

    Android通过Ksoap2链接WebService上传图片的功能.doc

    在本场景中,我们将探讨如何使用Ksoap2库来连接WebService实现图片上传功能。Ksoap2是一个轻量级的库,它使得Android应用能够与SOAP Web服务进行通信。 首先,我们来了解一下开发环境。在这个例子中,使用的是...

    android 利用ksoap2制作天气预报,绝对原创

    在Android开发中,利用ksoap2库来实现与远程Web服务的交互,是常见的功能之一。本教程将深入探讨如何使用ksoap2制作一个天气预报应用,这是一个基于Android的原创项目,非常适合初学者进行实践。ksoap2是一个轻量级...

    android调用天气.docx

    你需要从Google Code仓库下载ksoap2-android-assembly-2.4-jar-with-dependencies.jar,并将其添加到Eclipse工程的lib目录中,然后在项目中引入此JAR包作为依赖。 调用WebService的基本步骤如下: 1. **创建...

    android 怎样调用web服务

    ### Android如何调用Web...通过上述步骤,我们不仅了解了如何在Android应用中调用WebService,还学习了如何利用Ksoap2库构建SOAP请求、处理响应结果等关键步骤。这对于开发需要跨平台交互的应用程序来说是非常有用的。

    Android开发调用WebService的方法示例

    在Android中,由于SDK并未内置调用WebService的库,我们需要引入第三方库Ksoap2。Ksoap2提供了简单易用的API,帮助Android应用与WebService进行交互。可以从Google Code仓库下载ksoap2-android-assembly-2.4-jar-...

    Android利用SOAP协议调用天气预报服务.pdf

    Android系统平台是目前智能手机市场中使用最为广泛的开源平台之一,它允许开发者利用多种工具和语言来创建手机应用程序。本文探讨了如何在Android平台上利用SOAP协议调用天气预报服务,开发出能够实时获取天气信息的...

Global site tag (gtag.js) - Google Analytics