Подтвердить что ты не робот

Android classcastexception при запуске активности

У меня есть простая программа активности в 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 {

}
4b9b3361

Ответ 1

  • Открыть AndroidManifest.xml
  • Найти тег application
  • Удалить атрибут android:name (если существует)
  • Добавить атрибут android:name="android.app.Application"

Это то, что я сделал, и проблема исчезла.

P.S: На шаге 4 используйте свое собственное имя класса приложения, если оно есть (это необязательно).

Ответ 2

У меня была та же проблема.

В моем случае у меня был класс, который расширенное приложение, которое было указано в файле манифеста как атрибут тега приложения.

Когда я переопределял класс, Eclipse не включал ссылку в манифест (понятно, но расстраивающе и смутно), что привело к этой проблеме.

Это также связано с ответом Максима, но объяснение, по-видимому, является несоответствием.

Когда я изменил имя атрибута в соответствии с файлом, который я переименовал, проблема была решена.

Ответ 3

я сделал глупую ошибку,

my_textView = (<b>Button</b>) findViewById(R.id.tvMyTextView);

и это вызвало classcastexception..

я изменил это на очевидное,

my_textView = (<b>TextView</b>) findViewById(R.id.tvMyTextView);

и это сработало.

Я не знаю, как, но все, что я могу сказать, это то, что такие глупые ошибки могут также вызвать вышеупомянутую проблему.

Ответ 4

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
}

добавьте это и опубликуйте свой полный Manifest.xml

Ответ 5

У меня была такая же проблема, иногда возникающая, иногда, по-видимому, вызванная переупорядочиванием элементов в XML-макете.

Если вы разрешаете приложению продолжать выполнение после неперехваченного исключения, вы должны обнаружить, что в "adb logcat" вы получите гораздо более полезную стеклу, чем вы можете легко выйти из отладчика в тот момент, когда он останавливается.

Обычно это укажет на место, где действительно произошло исключение, которое обычно не является местом, где оно останавливается в отладчике.

В моем случае это было несоответствие между идентификаторами ресурсов - перемещение вещей в XML файле, казалось, путало такие вещи, что когда я делал view.findViewById(R.id.something), он не возвращал мне правильный объект. Я перебрасывал объект в TextView, который должен был быть абсолютно корректным в соответствии с содержимым моего XML-макета, но он сбой.

Вы можете обнаружить, что на самом деле у вас есть ошибка, в которой вы делаете недопустимый листинг, что, безусловно, вызовет это исключение, но в моем случае принудительное очищение и восстановление решают проблему - он регенерировал скомпилированные макеты и ресурсы Идентификаторы с нуля, и все работает как ожидалось.

Ответ 6

Если вы используете карты google:

<uses-library android:name="com.google.android.maps" /> 

Помните эту строку. Не могу поверить, что я забыл об этом и потратил столько времени.

Ответ 7

Я согласен с ответом Махеша. Это произойдет из-за назначения вида без кастования...

Это также произойдет, если вы создаете представление ImageButton View to Button View или какой-либо другой класс представления.

Ответ 8

У меня была такая же проблема, и я понял, что это вызвало неправильное использование в preferences.xml <CheckBoxPreference android:key="@+id/string" /> должны были быть изменены на <CheckBoxPreference android:key="string" />

Ответ 9

Если аналогичная проблема с ClassCastException говорит мне, что я не могу использовать EditText как TextView. Я не пытался. Пробовал очистить проект, но получил несколько ошибок "не удалять файлы...". Закрытое Eclipse, вновь открыло его, очистило проект. Проблема исчезла. Ясно, что это не сработает в каждом случае, но это одна возможность.