0
点赞
收藏
分享

微信扫一扫

android web services7

  • 修改原因:

错误信息
    最近在学Android使用KSOAP2调用现有的Webservice的方法,期间在网上找了很多代码,但是每次在Android模拟器中运行的时候程序都会崩溃,搞得自己都快崩溃了。。。。
    查看了一下LogCat中的错误报告,发现是因为java.lang.NoClassDefFoundError导致程序崩溃的:

复制到剪贴板   Java代码


1.  view plainprint?     
2. 600
3. 104
4. 84
5. 0 (WeatherActivity.java: 80
6. 1 .onClick(WeatherActivity.java: 75
7. 2408
8. 8816
9. 587
10. 92
11. 123
12. 4627
13.      at java.lang.reflect.Method.invokeNative(Native Method)        
14. 521
15. 868
16. 626
17.      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中,所以运行无误!


举报

相关推荐

0 条评论