34

我的一个应用程序有问题,我想知道是否有人可以让我了解可能导致它的原因。

我得到一个ClassNotFoundException,下面的重要行是

E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0

现在这个应用程序已经发布了一年多 2 天前,我有两个单独的用户就这个问题与我联系,一个是 HTC 野火(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 安装”而遇到问题,这可以通过重新安装来解决,我已经要求有问题的用户尝试(其中没有区别)。而且似乎一旦遇到问题(第一次使用)它就会持续存在。

4

9 回答 9

34

我不禁注意到您的活动名称是couk.doridori.goigoFull.Board,但您缺少的自定义视图类是couk.doridori.goigo.customUI.GoBoardView......看起来您可能有两个不同的包(goigo 与 goigoFull)。

你有没有机会在图书馆项目上做一些聪明的事情?您需要非常小心代码和布局 xml 中的完全限定类名......

(如果没有,请添加一些有关您的项目设置的更多信息,并粘贴您的布局 XML,layoutinflater 正在阻塞)

于 2011-02-15T20:36:28.043 回答
7

我已经在这里讨论了这个问题:Android:无法实例化活动/ClassNotFoundException,但我们找不到明确的答案......但是约翰·J·史密斯关于正确使用 Context 的回答很有趣。

有些人也在这个线程上解决了他们的问题并给出了一些想法。

希望这可以帮助...

(顺便说一句,我很高兴见到另一个围棋游戏程序员!)

于 2011-02-02T22:28:42.110 回答
3

我添加了一个自定义布局,并且仅在签名的应用程序包上开始看到 ClassNotFoundException 消息,但开发构建工作得很好。我正在使用 ProGuard,我添加的新布局未包含在 ProGuard 配置的“排除”列表中。我在 ProGuard 排除列表中包含了自定义布局,这为我解决了这个问题。

于 2011-06-08T16:52:18.517 回答
3

我在开发时有时会遇到这个问题——通常是在更改包名称之后。快速清理项目为我解决了这个问题。

于 2012-02-09T18:47:50.550 回答
1

还有另一件事导致“ClassNotFoundException”。前段时间,android项目开始使用libs目录进行依赖。如果 jar 在 libs 目录中,它会自动在类路径中,因此您不必在项目设置中添加它。但是,“libs”中的 jar 不能附加源(这很荒谬)。因此,如果要附加源,请将 jar 从“libs”移动到“lib”,然后将其添加到类路径中。您可以附加源。但是我已经多次看到这会在我的课程中触发 ClassNotFoundExceptions。将罐子移回即可解决问题。

于 2012-10-24T13:25:07.960 回答
1

我遇到过同样的问题。最后,问题只是缺少布局 xml 中的表格。

前:

    <org.osmdroid.views.MapView
    android:id="@+id/mapview"
    android:layout_width="fill_parent" 
    android:layout_height="0dip"
    tilesource="MapquestOSM" 
    android:layout_weight="1"
    />

然后随着缩进,classNotFoundException 再也没有出现,并且地图正确显示:

    <org.osmdroid.views.MapView
        android:id="@+id/mapview"
        android:layout_width="fill_parent" 
        android:layout_height="0dip"
        tilesource="MapquestOSM" 
        android:layout_weight="1"
    />
于 2012-11-23T20:36:54.637 回答
1

我的经验可能是更新了android sdk,需要刷新支持库的链接。只需转到项目设置> android 并再次指向支持库。

于 2013-06-20T06:22:34.747 回答
1

对我来说,问题是一个小小的 Caps-Fault。我查了好几个小时的代码,一切都很好。有一段时间我查看了我的 .xml-Files - 它是:

在 java-Files 中,我使用了 ViewPager,而在一个讨厌的 xml 文件中,我丢失了大写字母并错误地输入了 viewPager。很明显,这个是找不到的……

于 2013-06-25T07:47:42.710 回答
0

这是由于新版本的 eclipse ...从 buildpath 中删除所有外部依赖项,然后使用 project->properties->builspath->libraries 选项卡再次添加它。现在添加回所有依赖库并通过在 project->properties->builspath- 上的 order 和 project 选项卡上单击它们来选择所有组件。这会很好用!

于 2012-04-04T05:14:51.450 回答