錯誤資訊
java.lang.NoClassDefFoundError:org.ksoap2.serialization.soapobject
[java]
view plain
copy
print
?
- 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。
上面這樣的解決辦法都不行:
新解決辦法:
在項目中建立一個檔案夾libs,然後將KSOAP2的jar包copy到這個檔案夾下,右鍵jar包—>build path——>add to build path