100 unerklärliche Fehler

T

Thomi1

Fortgeschrittenes Mitglied
7
Hallo

Ich wollte gerade eine App schreiben. Mittendrin wollte ich mal testen. Habe vorher nicht auf die Fehler geschaut. Die App ist nicht gestartet, da Fehler vorhanden sind. Genauer gesagt sind es 100 Fehler, der Großteil davon in einer File von der ich nichtmal gewusst habe dass es sie gibt: in /preference/src/android/support/v4/app/SherlockPreferenceActivity.java

In der Beschreibung des Fehlers steht bei den meisten "ActionBar cannot be resolved to a type". Ich habe in meinem Programm keine einzige ActionBar verwendet. Wie sind diese Fehler zustande gekommen und wie kann ich sie beheben?

LG Thomi
 
Verwendest du irgendwelche Libraries?
 
Nicht dass ich wüsste.:confused2:
 
Hehe, so langsam schlägt die Seuche um sich :D Und ich war der Vorbote^^

Wie auch immer.. Eine Library ist bei dir definitiv verlinkt, sonst würde nicht support-blablabla da stehen. Manchmal wird beim Erstellen eines neuen Projekts (je nach API) eine Library automatisch mitgeladen (support-libraries), manchmal klickt man ausversehen den falschen Menüeintrag und schon hat man ungewollt wieder eine potenzielle Fehlerquelle im Projekt. Ich will nicht sagen, dass Libraries "nur potenzielle Gefahren sind" -> aber wenn man nicht genau weiß was im eigenen Projekt abgeht, wird die Fehlersuche bzw -behandlung nicht gerade einfacher.
Kurzum: meiner Ansicht nach ist es "normal", dass es immer mal wieder Probleme mit den Libraries gibt.

Mögliche Fehlerquellen:
-API Version aus irgendeinem Grund nicht kompatibel (unwahrscheinlich, kann aber vorkommen, siehe letzten Abschnitt)
-.. eigentlich ist es so besser formuliert: die Library ist nicht aktuell oder wurde fehlerhaft eingebunden.
-Link zur Library wurde geändert, gelöscht oder ist sonst irgendwie verhunzt.
-Library-Datei (s. Ordner: libs) wurde geändert, gelöscht oder ist sonst irgendwie verhunzt.
-Ressourcen in den (Support-)Libraries sind von Google unvollständig veröffentlicht. Beispielsweise können irgendwelche Werte in den values-Ordnern von Zimbabwe oder Mogadischu Fehler verursachen. Lösung: Einträge im "default" Ordner nachtragen -> die fehlerhafte Support-Library im Project-Explorer durchsuchen und unter values die Einträge bzw. Dateien von values-en (oder einer anderen Sprache) reinkopieren. Randbemerkung: values ist der default-Ordner...
-Eclipse ist nicht geupdatet
-das SDK ist nicht auf dem neusten Stand
-die APIs sind unvollständig / ACHTUNG: API 9 kann nur geladen werden wenn im SDK Manager obsolete mitangeklickt ist -> da rotzt einem die Console auch übelst viele Fehler und sonstigen Dreck vor den Latz.


Mögliche Lösungen:

Erst mal die IDE mit SDK auf den neusten Stand bringen, am besten währenddessen nichts machen - nur warten. Dann IDE neustarten und danach auch noch mal ein paar Sekunden warten. Bin mir nicht sicher, ob mein überstürztes Klicken in Eclipse häufig Fehler verursacht hat, aber seitdem ich "unenergischer" mit den Libraries arbeite und der IDE etwas Zeit gebe, funktioniert alles super :D

In Eclipse:
Rechtsklick aufs Projekt, dann Properties... dann unter Java Build Path -> hier im Reiter oben auf Libraries -> dann unten die Libraries mal durchschauen, ob da irgendwas mit einem roten Kreuz gekennzeichnet ist.
Wichtig: Libraries kann man in diesem Fenster auch unproblematisch löschen und neu verlinken.
Alternativ werden Fehler auch unter Properties -> Android -> runter scrollen "Library" angezeigt und können dort ebenfalls behoben werden.

Wenn alles auf dem neusten Stand ist, einmal jede Library raus geflogen ist und daraufhin neuverlinkt wurde, sind meist die Fehler verschwunden (nochmal: hier ist Hektik für die Fehlerbehebung hinderlich).

Meine Erfahrung ist dabei:
Erst ALLE (also wirklich ALLE in den Projekten verlinkten Libraries) entfernen und dann erst neu Verlinken.
Also:
Projekt1 -> Lib löschen und neu verlinken,
Projekt2 -> Lib löschen und neu verlinken = Fehler

Besser:
Projekt 1 Lib löschen,
Projekt 2 Lib löschen, usw.
DANN wenn alle "clean" sind, neu verlinken.
Fragt mich nicht warum das so ist, aber der Fehler war bei mir definitiv reproduzierbar.

Weiterer Hinweis: Wenn man Libraries manuell verlinken, sprich importieren, möchte (Aufruf: über File -> Import -> existing Android Code) ist darauf zu achten, dass "copy into workspace" NICHT aktiv ist. Hier gehen zwar die Meinungen auseinander, aber es macht dahingehend mehr Sinn, als dass die Libraries automatisch mit einem SDK-Update auf dem neusten Stand gehalten werden.

Ich hoffe es hilft dem ein oder anderen. :)
 
ui_3k1 schrieb:
Eine Library ist bei dir definitiv verlinkt, sonst würde nicht support-blablabla da stehen. Manchmal wird beim Erstellen eines neuen Projekts (je nach API) eine Library automatisch mitgeladen (support-libraries),
Blöde Frage, da ich mit der supportLibrary bisher nicht in Berührung gekommen bin: Haben die auch "Sherlock" als Bezeichner drin? Sherlock deutet für mich auf ActionBarSherlock - Home hin, nicht auf die support-library von Google :)
 
Das ist richtig. Meines Wissens startet man die Unterstützung von alten Geräten in der Support Library mit getSupportActionBar(). Ggf entsteht hier auch der Fehler des TE...
... gerade vor dem Hintergrund, dass in AdMob es ja ähnlich aussieht: Die alte advertings_v6???.jar (oder wie sie auch immer hieß) wird ja nicht mehr eingebunden, sondern nur noch die google-play-services.jar. :)

Ich frage mich da immer wie es Google sicher stellt, dass auf einem alten Gerät (älter als 2-3 Jahre) eine heute runter geladene App funktioniert. Zum damaligen Zeitpunkt hat ja niemand an die "heute gängigen" Libraries gedacht... Das Beispiel ist nicht mal aus der Luft gegriffen, wenn man überlegt, dass Google teilweise mit 99%iger Kompatibilität neue "Produkte" bewirbt. Hmm..

NACHTRAG:
Hab gerade nachgelesen und mal in die support.v4 reingeschaut.
Ergebnis: getSupportActionBar ist laut dem Artikel in v7 ermöglicht worden.
In einer support.v4, die ich in einem funktionstüchtigen Programm einsetze, finde ich keine SherlockPreferenceActivity (mehr?).
Ich steige da ehrlich gesagt nicht mehr durch. Gerade vor dem Hintergrund, dass man mit dem Menüeintrag "Add Support Library" genau diese v4 lädt, finde ich es nicht allzu abwegig zu vermuten, dass die Lib von Google stammt :)
 
Zuletzt bearbeitet:
SherlockPreferenceActivity ist keine Library von Google. Sie stammt noch aus den Zeiten, als es noch es von Google noch keine android-support-v7-appcompat Library gab. Am Anfang gab es von Google nur ein echt wilder Workaround, den man implementieren durfte, wenn man unter Android 2.x eine ActionBar haben wollte.

Deshalb benutzen viele alten Beispiele die ActionBarSherlock - Library. https://github.com/JakeWharton/Acti...rsherlock/app/SherlockPreferenceActivity.java
Sprich, hier hat mal wieder jemand Code kopiert, und nicht alles richtig eingebunden. ;)

Siehe auch ActionBarSherlock - Home
 

Ähnliche Themen

D
Antworten
3
Aufrufe
447
jogimuc
J
M
Antworten
1
Aufrufe
1.027
wilco
W
J
Antworten
0
Aufrufe
554
JoEntwickler
J
Zurück
Oben Unten