Activity 启动时出现 Android ClasscastException
-
27-09-2019 - |
题
我在 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 {
}
解决方案
- 打开
AndroidManifest.xml
- 查找标签
application
- 删除属性
android:name
(如果存在) - 添加属性
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,重新它,清理项目。问题就走了。显然,这在任何情况下将无法正常工作,但它是一个可能性。