Android ClassNotFoundException
Android ClassNotFoundException
我有一个应用程序的问题,想知道是否有人能给我一些关于可能导致问题的见解。
我遇到了一个ClassNotFoundException,下面是重要的一行:
E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0
现在这个应用程序已经发布了一年多了,两天前我有两个不同的用户联系我反馈了这个问题,一个是在HTC wildfire (2.1)上,另一个是在三星Galaxy S (?)上。现在我无法在我的设备(2.2和1.6)或模拟器(2.1)上重现这个问题,也无法弄清楚为什么类加载器无法找到这个类。我已经花了一段时间在谷歌上搜索,但没有任何结果,希望有人能给一些建议!只有在加载一个活动时才会出现这个问题,当设置contentView时,它会尝试膨胀一个名为GoBoardView的自定义视图,它扩展了View类,只做了一些简单的画布绘制,并没有使用任何第三方库或其他可能导致包名冲突的类。
请帮忙!以防万一是构建问题,我正在通过eclipse更新我的SDK和ADT,因为它是针对1.6构建的,并使用旧版ADT,但我不知道这是否有帮助,只是觉得值得一试。非常感谢任何建议!(请参见下面的编辑部分)
E/AndroidRuntime(21982): java.lang.RuntimeException: Unable to start activity ComponentInfo{couk.doridori.goigoFull/couk.doridori.goigoFull.Board}: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) E/AndroidRuntime(21982): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621) E/AndroidRuntime(21982): at android.app.ActivityThread.access$2200(ActivityThread.java:126) E/AndroidRuntime(21982): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932) E/AndroidRuntime(21982): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(21982): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime(21982): at android.app.ActivityThread.main(ActivityThread.java:4603) E/AndroidRuntime(21982): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(21982): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) E/AndroidRuntime(21982): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime(21982): Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576) E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:407) E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) E/AndroidRuntime(21982): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) E/AndroidRuntime(21982): at android.app.Activity.setContentView(Activity.java:1629) E/AndroidRuntime(21982): at couk.doridori.goigoFull.Board.onCreate(Board.java:31) E/AndroidRuntime(21982): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544) E/AndroidRuntime(21982): ... 11 more E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0 E/AndroidRuntime(21982): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) E/AndroidRuntime(21982): at android.view.LayoutInflater.createView(LayoutInflater.java:466) E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) E/AndroidRuntime(21982): ... 22 more
编辑
好的,研究了一些用户在回答这个问题时提到的链接,似乎在加载活动时使用错误的上下文可能会导致这个问题。我觉得这很有趣,因为其中之一的两个日志报告在这个异常之前有这样一个例外:
W/ActivityManager( 1222): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x20000 cmp=couk.doridori.goigoFull/.Games }
这很容易理解-问题是我不知道在哪里启动了这个活动,它使用了一个非活动上下文,所以我有点困惑,可能是一些多任务的怪异行为,它被带回到前台的某个地方。这似乎会对类加载器造成问题。如果这是发生在用户手机上,我就不明白为什么我无法重现这个问题(大多数其他用户也无法重现)。
我在链接中还发现了另一件有趣的事情,有些人遇到了"不正确的apk安装"的问题,可以通过重新安装来解决,我已经要求遇到这个问题的用户尝试过(但没有什么区别)。另外,一旦遇到了这个问题(在第一次使用时),它将会持续存在。