活动启动时的android classcastexception

cla*_*amp 12 android startup classcastexception android-activity

我在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]  
Run Code Online (Sandbox Code Playgroud)

当我查看runtimeexception时,我得到:

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 {

}
Run Code Online (Sandbox Code Playgroud)

Max*_*kiy 24

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

这就是我所做的,问题已经消失.

PS:在步骤4中使用自定义应用程序类名称(如果有)(可选).

  • 有人可以向我解释为什么会这样吗?ClassCastException与清单中的属性有什么关系?这是否被报告为错误? (5认同)
  • 编辑了答案,希望它变得更加清晰.是的,我的意思是"android.app.Application" (2认同)

小智 5

我有同样的问题.

在我的例子中,我有一个扩展应用程序的类,它在清单文件中作为应用程序标记的属性引用.

当我重新考虑类时,Eclipse没有在清单中包含引用(可以理解但令人沮丧和令人困惑),这导致了这个问题.

这也与马克西姆的答案有关,但解释似乎是差异.

当我更改属性名称以匹配我重命名的文件时,问题已解决.