Android ClassNotFoundException

时间:2011-02-02 22:09:58

标签: java android classnotfoundexception

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

我收到 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 }

这是非常自我解释 - 问题是我不知道这个活动可以从哪里开始使用非活动上下文,所以我有点难过,认为它可能是一些多任务,如怪癖和它被带回来进入某事的前景。这显然会导致classLoader出现问题。如果在用户手机上发生这种情况,我无法理解为什么我无法重现这一点(大多数其他用户也不能)。

我通过有趣的链接找到的另一件事是,有些人因为“错误的apk安装”而遇到了问题,这可以通过重新安装解决,我已经问过有问题的用户尝试(这没有什么区别)。似乎一旦遇到问题(首次使用时),它将是持久性的。

9 个答案:

答案 0 :(得分:33)

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

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

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

答案 1 :(得分:6)

我在这里已经讨论过这个问题了:Android: Unable to instantiate activity / ClassNotFoundException但我们找不到明确的答案......然而John J Smith关于正确使用Context的答案很有意思。

有些人也在this thread解决了他们的问题并提出了一些想法。

希望这会有所帮助......

(顺便说一句,我很高兴看到另一位Go游戏程序员!)

答案 2 :(得分:3)

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

答案 3 :(得分:2)

我有时在更改包名后进行开发时遇到此问题。快速清理项目为我解决了这个问题。

答案 4 :(得分:1)

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

答案 5 :(得分: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"
    />

答案 6 :(得分:1)

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

答案 7 :(得分:1)

对我来说问题是一个小小的错误。 我查了几个小时的代码,一切都很好。 有一段时间我查看了我的.xml文件 - 然后就是:

在java-Files中,我使用了一个ViewPager,在一个令人讨厌的小块xml中,我丢失了我的大写字母并错误地输入了viewPager。显而易见的是,无法找到这个......

答案 8 :(得分:0)

这是由于eclipse的新版本...从buildpath中删除所有外部依赖项并使用project-&gt; properties-&gt; builspath-&gt; libraries选项卡再次添加它。现在添加回所有依赖库并通过在项目上的订单和项目选项卡上单击它们来选择所有组件 - &gt; properties-&gt; builspath-。这样可以正常工作!

相关问题