我在 Android 中有一个简单的活动程序。基本上这个类只是扩展了 Activity。但是当我启动它时,我在类的构造函数中得到了 ClassCastException 。我什至没有定义构造函数,所以它必须位于超类 Activity 的构造函数中。

不幸的是,调试器没有提供有关它尝试转换哪个类的任何详细信息。

这是堆栈跟踪:

Thread [<1> main] (Suspended (exception RuntimeException))  
    ActivityThread$PackageInfo.makeApplication(boolean, Instrumentation) line: 649  
    ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4232 
    ActivityThread.access$3000(ActivityThread, ActivityThread$AppBindData) line: 125    
    ActivityThread$H.handleMessage(Message) line: 2071  
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 123 
    ActivityThread.main(String[]) line: 4627    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 521  
    ZygoteInit$MethodAndArgsCaller.run() line: 868  
    ZygoteInit.main(String[]) line: 626 
    NativeStart.main(String[]) line: not available [native method]  

当我查看运行时异常时,我得到:

detailMessage "Unable to instantiate application com.test.MyApp: java.lang.ClassCastException: com.test.MyApp" (id=830067694464)

唯一的代码是

package com.test;
import android.app.Activity;
public class MyApp extends Activity {

}
有帮助吗?

解决方案

  1. 打开 AndroidManifest.xml
  2. 查找标签 application
  3. 删除属性 android:name (如果存在)
  4. 添加属性 android:name="android.app.Application"

这就是我所做的,问题就消失了。

附:在步骤 4 中,使用您的自定义应用程序类名称(如果有的话)(这是可选的)。

其他提示

我有同样的问题。

在我的情况下我有一个类,这是在清单文件作为应用程序标记的属性引用的扩展应用。

当我重新分解类的Eclipse不包括这导致此问题清单中的参考(可以理解但令人沮丧和混淆)。

这也关系与Maxim的答案,但解释似乎是悬殊。

当我改变了属性名相匹配的文件,我改名的问题就解决了。

我犯了一个愚蠢的错误,

my_textView = (<b>Button</b>) findViewById(R.id.tvMyTextView);

和这引起了的 ClassCastException异常 ..

我改变这对明显的,

my_textView = (<b>TextView</b>) findViewById(R.id.tvMyTextView);

和它的工作..

我不知道如何,但我可以告诉的是,这种愚蠢的错误也会造成上述问题..

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
}

添加此并张贴您的完整的Manifest.xml

我有同样的问题存在的偶尔,有时显然是在XML布局重新排序的项目来触发。

如果您允许应用程序继续未捕获的异常后执行,你会发现,你在“亚行logcat”比你可以很容易地在它停止点得到调试出一个更为有用的堆栈跟踪。

这将通常在其中异常实际发生的位置,这是一般不会在那里它停止在调试器的位置点你。

在我而言,这似乎是资源ID之间的不匹配 - 在XML文件中走动事情似乎混淆的东西,这样当我做view.findViewById(R.id.something)它没有返回我的正确的对象。我被铸造的对象一个TextView,本应根据我的XML布局中的内容被完全有效的,但它是崩溃。

您可能会发现,你确实有,你正在做一个无效的转换,这肯定会导致此异常发生的错误,但在我的情况下,迫使干净重建解决了这个问题 - 它再生编译布局和资源从头的ID,和一切工作正常。

如果使用谷歌地图:

<uses-library android:name="com.google.android.maps" /> 

记住这条线。不敢相信,我忘了,浪费那么多的时间。

我同意马赫什的回答。这将不导致铸件发生在分配视图...

这也会发生,如果你投的ImageButton查看到按钮查看或其他一些视图类。

我有同样的问题,我想不通,这造成的preferences.xml错误用法 <CheckBoxPreference android:key="@+id/string" /> 必须是变化 <CheckBoxPreference android:key="string" />

曾与一个ClassCastException告诉我,我不能投一个EditText作为一个TextView类似的问题。我并不想。试图清理项目,但收到几个“无法删除文件...”的错误。封闭的Eclipse,重新它,清理项目。问题就走了。显然,这在任何情况下将无法正常工作,但它是一个可能性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top