2012-12-07 48 views
1

我們最近在我們的應用中引入了OAuth登錄。這意味着使用WebView對用戶進行身份驗證,並使用AsyncTask進行必要的REST調用。App強制關閉java.lang.NoClassDefFoundError:android/os/AsyncTask

不幸的是,在介紹這種登錄方法後,我們得到了應用程序部隊關閉的報告。這似乎與那些在登錄後執行其他AsyncTask S,但堆棧跟蹤不可惜沒有告訴我們很多:

java.lang.IllegalStateException: Could not execute method of the activity 
at android.view.View$1.onClick(View.java:3100) 
at android.view.View.performClick(View.java:3627) 
at android.view.View$PerformClick.run(View.java:14329) 
at android.os.Handler.handleCallback(Handler.java:605) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4511) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at android.view.View$1.onClick(View.java:3095) 
... 11 more 
Caused by: java.lang.NoClassDefFoundError: android/os/AsyncTask 
at com.foo.bar.TransmissionActivity.transmit(TransmissionActivity.java:44) 
... 14 more 

我們設法通過使用RoboAsyncTask(從RoboGuice)來解決上述錯誤,而不是來自Android SDK的AsyncTask,但我們還有其他使用WebView的活動。 WebView顯然在其調用堆棧中的某處使用AsyncTask,並且類似於上面顯示的錯誤(Caused by: java.lang.NoClassDefFoundError: android/os/AsyncTask)的錯誤已經開始顯示在我們的錯誤日誌中。

錯誤發生在不同的設備和不同的Android版本上,沒有明顯的模式。我們試圖自己重現錯誤,沒有任何運氣。

任何想法?

+1

我在錯誤的時間和地點創建任務時遇到過類似的問題。你能用AsyncTask顯示代碼示例嗎? – RagnarR

回答

0

這可能是構建設置的問題。 (src/gen的構建順序已知會導致一些問題,compat庫的libs文件夾被稱爲lib,這在新的sdk版本中對我造成了一些問題)。

看看是否創建一個新項目(在eclipse中,因爲這是100%的android官方)。添加一個webview和一個asynctask,然後用你的項目在項目上做一個diff。忽略src/gen/res。希望你會發現src/gen是以錯誤的順序或類似的方式構建的。

〜Anders