Вопрос

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

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

Вот укладка:

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 {

}
Это было полезно?

Решение

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

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

PS: На шаге 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.

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top