android classcastexception при запуске деятельности - PullRequest
12 голосов
/ 01 октября 2010

У меня есть простая программа деятельности в Android.в основном класс просто расширяет активность.Но когда я запускаю его, я получаю 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 {

}

Ответы [ 9 ]

24 голосов
/ 17 октября 2010
  1. Открыть AndroidManifest.xml
  2. Найти тег application
  3. Удалить атрибут android:name (если существует)
  4. Добавить атрибут android:name="android.app.Application"

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

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

5 голосов
/ 13 февраля 2011

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

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

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

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

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

4 голосов
/ 16 мая 2012

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

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

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

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

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

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

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

2 голосов
/ 07 января 2014

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

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

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

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

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

2 голосов
/ 10 ноября 2010
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
}

добавьте это и разместите ваш полный Manifest.xml

0 голосов
/ 31 августа 2014

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

0 голосов
/ 13 марта 2013

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

0 голосов
/ 23 сентября 2012

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

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

0 голосов
/ 09 декабря 2011

При использовании карт Google:

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

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

...