34 Stimmen

Android ClassNotFoundException

Ich habe ein Problem mit einer meiner Apps und frage mich, ob mir jemand einen Einblick geben könnte, was es verursachen könnte.

Ich erhalte eine ClassNotFoundException, die wichtige Zeile lautet

E/AndroidRuntime(21982): Verursacht durch: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in Loader dalvik.system.PathClassLoader@446fc3d0

Diese App ist seit über einem Jahr draußen und vor 2 Tagen haben mich zwei verschiedene Benutzer bezüglich dieses Problems kontaktiert, einer mit einem HTC Wildfire (2.1) und einer mit einem Samsung Galaxy S (?). Ich kann dieses Problem auf meinen Geräten (2.2 und 1.6) oder einem Emulator (2.1) nicht reproduzieren und kann nicht wirklich herausfinden, warum diese Klasse nicht vom Klassenlader gefunden werden kann. Ich habe eine Weile gegoogelt, aber ohne Erfolg, und hoffe, dass jemand Hinweise hat! Es tritt anscheinend nur auf, wenn eine Aktivität geladen wird, bei der beim Setzen des ContentView versucht wird, eine benutzerdefinierte Ansicht namens GoBoardView aufzublasen, die die View-Klasse erweitert. Diese führt nur einfache Canvas-Zeichnungen durch und verwendet keine Drittanbieter-Bibliotheken oder andere Klassen, die einen Paketnamenkonflikt oder ähnliches verursachen könnten.

Bitte helfen Sie! Falls es sich um ein Build-Problem handelt, aktualisiere ich mein SDK und ADT durch Eclipse, da es gegen 1.6 erstellt wurde und das alte ADT verwendet wurde, aber ich habe keine Ahnung, ob dies helfen wird, dachte aber, es wäre einen Versuch wert. Jegliche Ratschläge wären super, danke! (siehe unten für BEARBEITEN)

E/AndroidRuntime(21982): java.lang.RuntimeException: Aktivität ComponentInfo{couk.doridori.goigoFull/couk.doridori.goigoFull.Board} starten: android.view.InflateException: Binary-XML-Datei Zeile #14: Fehler beim Aufblasen der Klasse couk.doridori.goigo.customUI.GoBoardView
E/AndroidRuntime(21982): bei android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596)
E/AndroidRuntime(21982): bei android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
E/AndroidRuntime(21982): bei android.app.ActivityThread.access$2200(ActivityThread.java:126)
E/AndroidRuntime(21982): bei android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
E/AndroidRuntime(21982): bei android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(21982): bei android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(21982): bei android.app.ActivityThread.main(ActivityThread.java:4603)
E/AndroidRuntime(21982): bei java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(21982): bei java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(21982): bei com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(21982): bei com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(21982): bei dalvik.system.NativeStart.main(Methode: 0)
E/AndroidRuntime(21982): Verursacht durch: android.view.InflateException: Binary-XML-Datei Zeile #14: Fehler beim Aufblasen der Klasse couk.doridori.goigo.customUI.GoBoardView
E/AndroidRuntime(21982): bei android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
E/AndroidRuntime(21982): bei android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
E/AndroidRuntime(21982): bei android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
E/AndroidRuntime(21982): bei android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
E/AndroidRuntime(21982): bei android.view.LayoutInflater.inflate(LayoutInflater.java:407)
E/AndroidRuntime(21982): bei android.view.LayoutInflater.inflate(LayoutInflater.java:320)
E/AndroidRuntime(21982): bei android.view.LayoutInflater.inflate(LayoutInflater.java:276)
E/AndroidRuntime(21982): bei com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
E/AndroidRuntime(21982): bei android.app.Activity.setContentView(Activity.java:1629)
E/AndroidRuntime(21982): bei couk.doridori.goigoFull.Board.onCreate(Board.java:31)
E/AndroidRuntime(21982): bei android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(21982): bei android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
E/AndroidRuntime(21982): ... 11 weitere
E/AndroidRuntime(21982): Verursacht durch: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in Loader dalvik.system.PathClassLoader@446fc3d0
E/AndroidRuntime(21982): bei dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
E/AndroidRuntime(21982): bei java.lang.ClassLoader.loadClass(ClassLoader.java:573)
E/AndroidRuntime(21982): bei java.lang.ClassLoader.loadClass(ClassLoader.java:532)
E/AndroidRuntime(21982): bei android.view.LayoutInflater.createView(LayoutInflater.java:466)
E/AndroidRuntime(21982): bei android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
E/AndroidRuntime(21982): ... 22 mehr

BEARBEITEN

Ok, während der Recherche einiger Links, die Benutzer kommentiert haben, scheint die Verwendung des falschen Kontexts für das Laden von Aktivitäten dieses Problem verursachen zu können. Ich finde das interessant, weil eine der zwei Log-Meldungen, die mir zugesendet wurden, diese Ausnahme durch

W/ActivityManager( 1222): StartActivity aufgerufen von Nicht-Aktivitätskontext; Intent.FLAG_ACTIVITY_NEW_TASK für Intent { flg=0x20000 cmp=couk.doridori.goigoFull/.Games } erzwungen

was ziemlich selbsterklärend ist - das Problem ist, dass ich keine Ahnung habe, von wo aus diese Aktivität gestartet sein könnte, wo ein Nicht-Aktivitätskontext verwendet wird, also bin ich ein wenig ratlos, ich denke, es könnte eine Art Multitasking-Merkwürdigkeit sein und es wird wieder in den Vordergrund gebracht. Dies kann anscheinend Probleme mit dem Klassenlader verursachen. Wenn dies auf dem Telefon eines Benutzers passiert wäre, kann ich nicht sehen, warum ich dies nicht reproduzieren kann (und die meisten anderen Benutzer auch nicht).

Das andere, was ich durch die Links gefunden habe, ist interessant, dass einige Leute Probleme aufgrund einer "falschen APK-Installation" hatten, die durch eine Neuinstallation gelöst werden kann, was ich die Benutzer, die das Problem hatten, ausprobieren lassen habe (was keinen Unterschied macht). Es scheint auch, dass, sobald das Problem auftritt (was beim ersten Gebrauch passiert), es bestehen bleibt.

0 Stimmen

Hast du einen Broadcast-Empfänger mit dem Intent-Filter Intent.FLAG_ACTIVITY_NEW_TASK? Dies könnte der Nicht-Aktivitätskontext sein, der versucht, eine deiner Aktivitäten zu starten.

1voto

roky Punkte 198

Ich hatte das gleiche Problem. Am Ende lag das Problem einfach an fehlenden Einrückungen im Layout-XML.

Vorher:

Dann, mit der Einrückung, trat die ClassNotFoundException nie wieder auf und die Karte wurde korrekt angezeigt:

8 Stimmen

Vielleicht musstest du tatsächlich dein Projekt neu erstellen, ich wette, Einrückung hatte nichts damit zu tun ^^

1voto

Yaojin Punkte 331

Meine Erfahrung könnte sein, dass das Android SDK aktualisiert wurde und der Link zur Support-Bibliothek erneuert werden musste. Gehen Sie einfach zu den Projekteinstellungen > Android und zeigen Sie erneut auf die Support-Bibliothek.

1voto

Jochen Birkle Punkte 335

Für mich war das Problem ein kleiner Fehler mit Großbuchstaben. Ich habe stundenlang meinen Code durchsucht, wo alles in Ordnung war. Irgendwann habe ich dann in meine .xml-Dateien geschaut - und da war es:

In den Java-Dateien habe ich einen ViewPager verwendet und in einem fiesen kleinen Stück des XML habe ich versehentlich meine Großschreibung verloren und viewPager falsch geschrieben. Offensichtlich war dieser dann nicht zu finden...

0voto

rana Punkte 1674

Dies liegt an der neuen Version von Eclipse ... entfernen Sie alle externen Abhängigkeiten aus dem Buildpath und fügen Sie sie erneut hinzu, indem Sie auf Projekt->Eigenschaften->Buildpath->Registerkarte Bibliotheken klicken. Fügen Sie jetzt alle Abhängigkeitsbibliotheken wieder hinzu und wählen Sie alle Komponenten aus, indem Sie auf sie klicken in der Reihenfolge- und Projektregisterkarte unter Projekt->Eigenschaften->Buildpath-. Das sollte funktionieren!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X