注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

姑射道人的博客

博客新地址:nixuchen.com

 
 
 

日志

 
 

java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject  

2012-07-17 21:54:00|  分类: android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

错误信息

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

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

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

Java代码 
  1. ERROR/AndroidRuntime(600): java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject    
  2.     at webservice.weather.WeatherActivity.getWeather(WeatherActivity.java:104)    
  3.     at webservice.weather.WeatherActivity.showWeather(WeatherActivity.java:84)    
  4.     at webservice.weather.WeatherActivity.access$0(WeatherActivity.java:80)    
  5.     at webservice.weather.WeatherActivity$1.onClick(WeatherActivity.java:75)    
  6.     at android.view.View.performClick(View.java:2408)    
  7.     at android.view.View$PerformClick.run(View.java:8816)    
  8.     at android.os.Handler.handleCallback(Handler.java:587)    
  9.     at android.os.Handler.dispatchMessage(Handler.java:92)    
  10.     at android.os.Looper.loop(Looper.java:123)    
  11.     at android.app.ActivityThread.main(ActivityThread.java:4627)    
  12.     at java.lang.reflect.Method.invokeNative(Native Method)    
  13.     at java.lang.reflect.Method.invoke(Method.java:521)    
  14.     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)    
  15.     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)    
  16.     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中,所以运行无误!

  评论这张
 
阅读(3285)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017