Frage

Ich habe ein einfaches Aktivitätsprogramm in Android. im Grunde die Klasse erweitert gerade Aktivität. Aber wenn ich es starte ich einen Classcast im Konstruktor meiner Klasse bekommen. i nicht sogar ein Konstruktor definiert haben, so ist es in den Konstruktor der Superklasse sein muß, die Aktivität ist.

leider ist der Debugger doesnt geben, alle Informationen auf, welche Klasse es zu Guss versucht.

Hier ist die 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]  

, und wenn ich die Runtime Blick in die ich erhalten:

detailMessage "Unable to instantiate application com.test.MyApp: java.lang.ClassCastException: com.test.MyApp" (id=830067694464)

der einzige Code ist

package com.test;
import android.app.Activity;
public class MyApp extends Activity {

}
War es hilfreich?

Lösung

  1. Öffnen AndroidManifest.xml
  2. Suchen Tag application
  3. Attribut löschen android:name (falls vorhanden)
  4. Fügen Sie Attribut android:name="android.app.Application"

Das ist, was ich tat, und das Problem gegangen war.

P. S:. In Schritt 4 verwenden, um Ihre benutzerdefinierten Anwendung Klassennamen, wenn Sie eine haben (das optional ist)

Andere Tipps

Ich hatte das gleiche Problem.

In meinem Fall hatte ich eine Klasse, die erweiterte Anwendung, die in der Manifest-Datei als Attribut des Anwendungs ??Tages verwiesen wurde.

Wenn ich die Klasse wieder einkalkuliert Eclipse-umfaßte nicht die Referenz im Manifest (verständlicherweise aber frustrierend und verwirrend), die in dieser Frage geführt hat.

Dies hat auch in Beziehungen mit Maxims Antwort, aber die Erklärung scheint die Disparität zu sein.

Wenn ich die Attributnamen geändert, um die Datei entsprechen, dass ich das Problem umbenannt wurde behoben.

Ich habe einen dummen Fehler,

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

und dies verursacht die Classcast ..

i änderte sich dies auf die offensichtliche,

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

und es funktioniert ..

Ich weiß nicht, wie, aber alles, was ich sagen kann, ist, dass eine solche dumme Fehler kann auch dazu führen das oben genannte Problem ..

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

        setContentView(R.layout.main);
}

Fügen Sie diese und geben Sie Ihre vollständige Manifest.xml

Ich hatte das gleiche Problem gelegentlich auftreten, manchmal scheinbar ausgelöst durch Nachbestellung Elemente in einem XML-Layout.

Wenn Sie die App möglicherweise nach der abgefangene Ausnahme weiterhin ausführen, sollten Sie, dass Sie einen viel hilfreichen Stacktrace in „adb logcat“ erhalten, als Sie leicht von dem Debugger an der Stelle aussteigen können, wo es aufhört.

Dies werden Sie in der Regel an der Stelle zeigen, wo die Ausnahme tatsächlich eingetreten ist, die in der Regel nicht der Ort ist, wo es im Debugger stoppt.

In meinem Fall schien es eine Diskrepanz zwischen Ressourcen-IDs zu sein - Dinge um in der XML-Datei zu bewegen schienen Dinge zu verwirren, so dass, wenn ich view.findViewById (R.id.something) tat es zurückkehrt mich nicht richtiges Objekt. Ich war das Objekt in ein Textview Gießen, die sich perfekt gültig sein sollte entsprechend dem Inhalt meiner XML-Layout, aber es war abstürzt.

Sie können feststellen, dass Sie tatsächlich einen Fehler haben, wo Sie eine ungültige Besetzung tun, was sicherlich diese Ausnahme verursacht passieren, aber in meinem Fall ein sauberen zwingen und den Wiederaufbau lösten das Problem - es die kompilierten Layouts und Ressourcen regenerierten IDs von Grund auf neu, und alles hat funktioniert wie erwartet.

Wenn Google mit Karten:

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

Denken Sie daran, diese Zeile. Kann nicht glauben, dass ich es vergessen und so viel Zeit verschwendet.

Ich bin damit einverstanden Antwort mit Maheshs .. Dies geschieht durch den Blick auf die Zuweisung ohne Gießen ...

Dies wird auch passieren, wenn Sie einen Image Blick auf Button-Ansicht oder eine andere Ansicht Klassen sind gegossen wird.

hatte ich gleiches Problem, und ich herausgefunden hat, dass diese falsche Verwendung in preferences.xml verursacht <CheckBoxPreference android:key="@+id/string" /> zu ändern musste <CheckBoxPreference android:key="string" />

Sie hat ein ähnliches Problem mit einer Classcast mich zu sagen, ich keine EditText als Textview werfen könnte. Ich versuche, nicht zu tun. Versucht, das Projekt zu reinigen, sondern mehrere ‚kann nicht Datei löschen ...‘ erhielt Fehler. Geschlossen Eclipse wieder eröffnet es, das Projekt gereinigt. Das Problem ging weg. Offensichtlich dies nicht funktionieren wird in jedem Fall, aber es ist eine Möglichkeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top