我在android中有一个简单的活动程序。 基本上这个类只是扩展Activity。 但是当我开始它时,我在我的类的构造函数中得到一个ClassCastException。 我甚至没有定义构造函数,所以它必须在超类的构造函数中是Activity。
遗憾的是,调试器没有提供有关它正在尝试投射的类的任何详细信息。
这是stacktrace:
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]
当我查看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 {
}
答案 0 :(得分:24)
AndroidManifest.xml
application
android:name
(如果存在)android:name="android.app.Application"
这就是我所做的,问题已经消失。
P.S:在第4步中使用自定义应用程序类名称(如果有的话)(可选)。
答案 1 :(得分:5)
我遇到了同样的问题。
在我的情况下,我有一个扩展应用程序的类,它在清单文件中作为应用程序标记的属性引用。
当我重新考虑类时,Eclipse没有在清单中包含引用(可以理解但令人沮丧和令人困惑)导致了这个问题。
这也与马克西姆的答案有关,但解释似乎是差距。
当我更改属性名称以匹配我重命名的文件时,问题已解决。
答案 2 :(得分:4)
我犯了一个愚蠢的错误,
my_textView = (<b>Button</b>) findViewById(R.id.tvMyTextView);
这导致 classcastexception ..
我把它改成了显而易见的,
my_textView = (<b>TextView</b>) findViewById(R.id.tvMyTextView);
它有效..
我不知道如何,但我能说的是,这种愚蠢的错误也会导致上述问题。
答案 3 :(得分:2)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
添加此内容并发布完整的Manifest.xml
答案 4 :(得分:2)
我偶尔会遇到同样的问题,有时显然是通过重新排序XML布局中的项目来触发的。
如果您允许应用程序在未捕获的异常之后继续执行,您应该会发现在“adb logcat”中获得了一个更有用的堆栈跟踪,而不是在它停止时轻松退出调试器。
这通常会指向实际发生异常的位置,通常不是它在调试器中停止的位置。
在我的情况下,它似乎是资源ID之间的不匹配 - 在XML文件中移动东西似乎混淆了这样的事情,当我查看view.findViewById(R.id.something)时它没有返回给我正确的对象。我正在将对象转换为TextView,根据我的XML布局的内容,它应该完全有效,但它崩溃了。
你可能会发现你实际上有一个错误,你正在做一个无效的转换,这肯定会导致这个异常发生,但在我的情况下强制清理和重建解决了问题 - 它重新生成了编译的布局和资源从头开始的ID,一切都按预期工作。
答案 5 :(得分:0)
如果使用谷歌地图:
<uses-library android:name="com.google.android.maps" />
记住这一行。无法相信我忘了它,浪费了太多时间。
答案 6 :(得分:0)
我同意Mahesh的回答。这将由于分配视图而不进行投射而发生......
如果您将ImageButton视图转换为Button View或其他View Class,也会发生这种情况。
答案 7 :(得分:0)
我有同样的问题,我发现,这导致了preferences.xml的错误使用
<CheckBoxPreference android:key="@+id/string" />
不得不改变
<CheckBoxPreference android:key="string" />
答案 8 :(得分:0)
类似的ClassCastException问题告诉我,我无法将EditText转换为TextView。我没有尝试。试图清理项目但收到了几个“无法删除文件...”错误。关闭Eclipse,重新打开它,清理项目。问题消失了。很明显,这并不适用于所有情况,但这是一种可能性。