2010-10-01 3 views
12

У меня есть простая программа для работы в android. В основном класс просто расширяет Activity. Но когда я его запускаю, я получаю ClassCastException в конструкторе моего класса. У меня даже нет конструктора, поэтому он должен быть в конструкторе суперкласса, который является Activity.android classcastexception при запуске активности

К сожалению, отладчик не дает подробной информации о том, какой класс он пытается использовать.

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

Не могли бы вы добавить здесь код программы? –

+1

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

+3

@clamp: Пройдите мимо исключения и позвольте Android собирать информацию о стеке. Просмотрите его в панели LogCat в вашей DDMS-перспективе. Это может дать вам больше информации о том, что происходит. – CommonsWare

ответ

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

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

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

+0

спасибо, но это не помогает. Вы действительно хотите установить строку «android.app.Application» там или на самом деле имя приложения? – clamp

+2

отредактировал ответ, надеясь, что он станет более ясным. Да, я имею в виду именно «android.app.Application» –

+0

спасибо, что действительно исправить проблему! – clamp

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

     setContentView(R.layout.main); 
} 

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

5

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

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

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

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

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

+0

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

+0

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

0

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

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

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

4

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

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

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

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

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

и он работал ..

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

+0

Да, это очень верно! Я потратил около трех часов, пытаясь решить все эти ошибки, когда мне нужен ImageButton, а не Button, и все ошибки, присутствующие в этом сообщении, исчезли! – WebDevDanno

0

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

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

0

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

2

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

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

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

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

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

+0

Да, у меня был тот же самый случай. Убрал проект, и он сработал. – akshay7692

+0

+1 Я должен был прочитать его первым. Благодаря! – Suzi

0

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

Смежные вопросы