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 ответов


  1. открыть AndroidManifest.xml
  2. найти тег application
  3. удалить атрибут android:name (Если есть)
  4. добавить атрибут 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, снова открыл его, очистил проект. Проблема исчезла. Ясно, что это не сработает в каждом случае, но это одна из возможностей.