Android classcastexception при запуске активности
у меня есть простая программа активности в android. в основном класс просто расширяет активность. Но когда я запускаю его, я получаю ClassCastException в конструкторе моего класса. у меня даже нет определенного конструктора, поэтому он должен быть в конструкторе суперкласса, который является Activity.
к сожалению, отладчик не дает никакой подробной информации о том, какой класс он пытается бросить.
вот stacktrace:
Thread [<1> main] (Suspended (exception RuntimeException))
ActivityThread$PackageInfo.makeApplication(boolean, Instrumentation) line: 649
ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4232
ActivityThread.access00(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 {
}
9 ответов
- открыть
AndroidManifest.xml
- найти тег
application
- удалить атрибут
android:name
(Если есть) - добавить атрибут
android:name="android.app.Application"
это то, что я сделал и проблема ушла.
P. S: на шаге 4 используйте имя пользовательского класса приложения, если оно у вас есть (это необязательно).
У меня была та же проблема.
в моем случае у меня был класс, который расширенное приложение, на которое ссылались в файле манифеста как атрибут тега приложения.
когда я пересчитал класс Eclipse, не включил ссылку в манифест (понятно, но разочаровывающе и запутанно), что привело к этой проблеме.
Это также связано с ответом Максима, но объяснение, похоже, будет несоответствием.
Когда Я изменено имя атрибута в соответствии с файлом, который я переименовал проблема была решена.
Я совершил глупую ошибку,
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);
}
добавьте это и опубликуйте полный Манифест.в XML
У меня была такая же проблема, возникающая иногда, иногда, по-видимому, вызванная переупорядочением элементов в макете XML.
Если вы разрешите приложению продолжать выполнение после исключения uncaught, вы должны обнаружить, что получаете гораздо более полезный stacktrace в "adb logcat", чем вы можете легко выйти из отладчика в точке, где он останавливается.
Это обычно указывает вам на место, где фактически произошло исключение, которое обычно не является место, где он останавливается в отладчике.
в моем случае это казалось несоответствием между идентификаторами ресурсов - перемещение вещей в XML-файле, казалось, запутывало вещи, когда я смотрел.findViewById (R. id.что-то) он не возвращал мне правильный объект. Я бросал объект в TextView, который должен был быть совершенно действительным в соответствии с содержимым моего XML-макета, но он рушился.
вы можете обнаружить, что у вас на самом деле есть ошибка, где вы выполнение недопустимого приведения, которое, безусловно, вызовет это исключение, но в моем случае принудительная очистка и перестройка решили проблему - он восстановил скомпилированные макеты и идентификаторы ресурсов с нуля, и все работало так, как ожидалось.
при использовании Google maps:
<uses-library android:name="com.google.android.maps" />
Помните эту строку. Не могу поверить, что забыла его и потратила столько времени.
Я согласен с ответом Махеша.. Это произойдет из-за назначения представления без приведения...
Это также произойдет, если вы создаете представление ImageButton для представления кнопки или другого класса представления.
у меня была такая же проблема, и я выяснить, что это вызвало неправильное использование в настройках.XML
<CheckBoxPreference android:key="@+id/string" />
пришлось изменить
<CheckBoxPreference android:key="string" />
была аналогичная проблема с ClassCastException, говорящим мне, что я не мог бросить EditText в качестве TextView. Я и не пытался. Пытался очистить проект, но получил несколько " не удается удалить файл...' ошибки. Закрыл Eclipse, снова открыл его, очистил проект. Проблема исчезла. Ясно, что это не сработает в каждом случае, но это одна из возможностей.