[SOLVED]Problem: NullPointerException - ich finde den Fehler nicht

  • Hi Android-Freunde,
































    Ich versuche mir derzeit die Grundkenntnisse in Android anzueignen, habe bereits ein bisschen Java Hintergrundwissen und ein Spiel auf Grundlage des Buches "Android-Apps entwickeln" von Galileo Computing nachgebaut.
































    nun bin ich auf einem Stand, auf dem es eigentlich funktionsfähig sein sollte (in der einfachsten/schlichtesten Version), erhalte jedoch beim Start der Spielrunde eine NullPointerException und weder ich, noch mein aktuell Informatik studierender Bruder können den Fehler im Code finden































































    hat jemand selbst das Spiel nachgeschrieben und das selbe Problem gehabt/ den Fehler gefunden - oder kann mir jemand anderes meinen Fehler sagen?
































    mit der funktionierenden Spielversion auf der DVD zum Buch habe ich bereits verglichen - konnte jedoch keine unterschiede finden (außer bei variablenbezeichnungen o.ä. - habe inzwischen nahezu 100% angeglichen - der fehler besteht weiterhin)
















































    Informationen zum System:
















    Ich schreibe mit Eclipse, Compile in 1.6 (hab inzwischen auch gecheckt dass der Text im Buch in 1.7 so nicht funktioniert) - die Basis des Buches ist auf Android 2.2 also habe ich auch dies eingestellt,
















    getestet habe ich es auf Virtuellen Android 2.1, 2.2 Geräten, die Version von der DVD läuft auf beiden Problemlos
































    Liebe Grüße,
















    Proffni




  • Zitat



    und in dieser Zeile 140 von gameActivity steht eben des long altergeb =((Date)geburtsdatum).getTime(), welches ich ja schon aus der kombinierten Formel herausgeholt hab um den Fehlerbereich einzuschränken. (Auch ohne das (Date) funktionierts nicht, welches ich nur nochmal extra dazu gemacht hab weil ich befürchtet hab dass es beim initialisieren vllt ned funktioniert hat aber daran liegts auch ned)

  • Hi Proffni,

    Java
    long altergeb =((Date)geburtsdatum).getTime();


    Im allgemeinen besagt die NullPointerException das du auf etwas zugreifst was nicht da ist bzw das Object ist Null.
    Da hilft auch kein Cast nach Date weil wenn "geburtsdatum" null ist wäre es auch nach dem Cast null.


    So da die Exception beim Aufruf der getTime() ausgelöst wird schauen wir uns mal die Erzeugung von "Geburtsdatum" an.
    Ich vermutet das dein Problem hier liegt:

    Java
    Date geburtsdatum = (Date) mueckev.getTag(R.id.geburtsdatum);


    Was ist denn R.id.geburtsdatum bzw wie sieht es aus? Ist das orginal so oder hast du das verändert?


    Mfg Titus

  • is im Original so, und wie du im Quelltext unter mueckeAnzeigen finden kannst, wird dieser Tag in R.id.geburtsdatum geschrieben beim erstellen der Datei, auch als (Date) eigentlich.


    die id ist in einer ids.xml festgelegt die ich über den xml wizard in eclipse erstellt hab, wird auch in der (gen) java datei angezeigt, wo die ids festgehalten werden, müsste also eigentlich alles da sein .__.

  • Hi Proffni,


    also wenn ich deinen Code richtig verstehe dann wird in "R.id.geburtsdatum" NUR in der Funktion "eineMueckeAnzeigen()" ein Datum rein geschrieben.
    Die Funktion "eineMueckeAnzeigen()" wird auch NUR in der Funktion "zeitHerunterzaehlen()" aufgerufen.


    Hoffe du kannst mir soweit folgen.


    Sollte jetzt dies IF Abfrage in "zeitHerunterzaehlen()" scheitern:


    Das heißt ist die erste If False und die If innerhalb des Else Zweiges auch False, wird kein Datum in "R.id.geburtsdatum" geschrieben.
    Nach dieser If Abfrage wird jetzt aber die Funktion "mueckenVerschwinden();" aufgerufen und in ihr fragst du das Datum ab.
    Steht kein Datum in "R.id.geburtsdatum" kommt es zur NullPointerException.


    So soweit die Theorie du müsstest jetzt deinen Code entweder durch den Debugger jagen und mittels Haltepunkte sehen ob die If-Bedingungen durchlaufen werden oder du machst dir mittels Log.d() ein paar Kontrollausgaben innerhalb der If Abfrage.


    Sollten die Kontrollausgaben vor dem Stacktrace der Execption in der LogCat stehen ist meine THeorie hinfällig und wir müssen uns irgendetwas anderes überlegen.


    mfg Titus


    P.s. habs eben mal durch gerechnet.

    Java
    double wahrscheinlichkeit = muecken *1.5 /ZEITSCHEIBEN;


    0,025 = 10 * 1.5/600;
    so damit ist die erste If Abfrage false.


    die zweite wird wahrscheinlich auch false sein da diese simple Test:

    Java
    Random zufallsgenerator = new Random();
    System.out.println(zufallsgenerator.nextFloat());


    fast immer eine Zahl geliefert hat die größer als 0,025 war.


    Um sicher zugehen mach das mit dem Debugger bzw Kontrollausgeben.

  • du liegst wohl richtig, habe in allen 3 bereichen der if-konstellation eine Lognachricht eingestellt, keine wurde vor der exception angezeigt, nur verstehe ich dann nicht was ich falsch gemacht hab bzw wie ich das behebe, da die if-konstellation im original genau gleich ist... und dort auch zu funktionieren scheint

  • du liegst wohl richtig, habe in allen 3 bereichen der if-konstellation eine Lognachricht eingestellt, keine wurde vor der exception angezeigt, nur verstehe ich dann nicht was ich falsch gemacht hab bzw wie ich das behebe, da die if-konstellation im original genau gleich ist... und dort auch zu funktionieren scheint






    habe gerade nochmal durch den code geschaut... dieser fehler wird ja eigentlich durch die while schleife in mueckenVerschwinden() ausgeschlossen... die Nummer wird auf 0 gesetzt und nur wenn die nummer kleiner ist als die anzahl der muecken welche ja in "spielbereich.getChildCound()" ausgegeben werden (im spielbereich sind keine anderen childs), sollte überhaupt die whileschleife ausgeführt werden


    EDIT: ok vergiss es, ich hab mir ja gerade selber erklärt wo der fehler liegt ;) im design hatte ich noch einen imageview in "spielbereich" standardmäßig drin der nur ausgeblendet ist... in der anleitung stand dass man den testweise erstellen soll um sich die attribute anzuschauen, und ich depp hab vergessen die wieder rauszulöschen - danke.. problem solved mein programm läuft - hätte nur die scheiß mücke ausm design löschen müssen xD

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!