Imagebutton NullpointerException

  • Hallo lieber community,


    ich hänge schon seit einem halben tag an der sache und komme einfach nicht weiter. Ich habe eine Listview (main list) die man anklicken kann. wird eines der items angeklickt öffnet sich ein dialog, welches eine custom Listview (sub list) beinhaltet. Jede zeile hat zwei textviews und ein imagebutton (delete). Aber wenn ich auf ein item von der main list klicke bekomme ich eine nullpointerexception, die ich mir nicht erklären kann.




    wenn ich die methode deleteBtn.setOnClickListener() ( Das ist die zeile 193-199) auskommentiere, dann gibt es keine exception. Ich habe auch andere dialogs mit imagebuttons, wo ich das genauso programmiert habe. Komischwerweise geht das in diesem dialog nicht. ?(

  • Das sieht für mich so aus als würde Deine Referenz auf deleteBtn nicht existieren.
    Hast Du verifiziert, dass deleteBtn != null ist?
    Im Code hast Du es jedenfalls nicht verifiziert.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Na, dann hast Du den Fehler ja gefunden. ;)
    Sorg dafür, dass deleteBtn nicht mehr null ist, dann klappt's auch mit dem OnClickListener.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Referenzen kaputt, R durch einen Fehler in irgend einem XML nicht neu erstellt, bei der ID vertippt… das kann an allem Möglichen liegen.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Zitat

    Na, dann hast Du den Fehler ja gefunden. ;)


    Sorg dafür, dass deleteBtn nicht mehr null ist, dann klappt's auch mit dem OnClickListener.

    jaaa, das wusste ich ja bereits :D
    wie soll ich dafür sorgen ? :D haha... hab es ja eigentlich so geschrieben das es gar nicht null sein kann. :D

    Zitat

    hatte so ein ähnliches Problem auch mal, habe dann mal das Projekt gecleaned und da liefs komischerweise wieder.

    Zitat

    Referenzen kaputt, R durch einen Fehler in irgend einem XML nicht
    neu erstellt, bei der ID vertippt… das kann an allem Möglichen liegen.

    hmm... danke für die antworten und tipps. daran könnte es eher liegen. ich werde morgen mich weiter damit beschäftigen. ;)

  • wie soll ich dafür sorgen ? :D haha... hab es ja eigentlich so geschrieben das es gar nicht null sein kann. :D


    Du hast geschrieben:

    Java
    ImageButton deleteBtn   = (ImageButton)dialog3.findViewById(R.id.dialog3_imageBtnDelete);


    Da findViewById null zurückliefern kann, stimmt Deine Aussage also gar nicht.


    Java
    ImageButton deleteBtn   = (ImageButton)dialog3.findViewById(R.id.dialog3_imageBtnDelete);
    if(deleteBtn == null) {
      deleteBtn = new ImageButton(this);
      // Configure button
      // Try to put it into your layout
    }


    So sorgst Du dafür, dass es gar nicht null sein kann. ;)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Ja, das geht. Oder auch: nein, das geht nicht. Wie Du magst. Soweit ich weiß wird 'null' nicht gecastet.
    Im Gegensatz zu C/Objective-C werden die Casts in Java ja zur Laufzeit in der RuntimeEnvironment irgendwie umgebogen, was im Problemfall zu ClassCastExceptions führen kann. Da null ja per se nicht von derselben Klasse sein kann, wird auch kein Cast im eigentlichen Sinne durchgeführt. Es wird lediglich als erfolgreich durchgewunken.


    null ist alles und nichts. Du kannst jeder Methode, die einen Parameter vom Typen eines Objektes erwartet, ein null mitgeben.
    Der schluckt das erst mal, da 'null' ja nicht falsch ist.
    Assoziationsketten:
    'Ich will eine Liste. Ich bekomme eine Liste. Fein.'
    'Ich will eine Liste. Ich bekomme nichts. Fein.'
    'Ich will eine Liste. Ich bekomme ein Bild. Spinnste?'


    Du benutzt es ja auch ständig.

    Java
    View temporaryView;
    temporaryView = new View(); // Läuft, ist ja ein View.
    temporaryView = new Button(); // Läuft, auch ein View.
    temporaryView = new ArrayList<Integer>(); // Compilerfehler beim Bauen bzw. ClassCastException zur Laufzeit
    temporaryView = "Hallo Welt!"; // Compilerfehler beim Bauen bzw. ClassCastException zur Laufzeit
    temporaryView = null; // geht, obwohl es ja nicht vom Typ 'View' ist.


    null ist ein Platzhalter für 'nüscht'. Und 'nüscht' ist sehr wichtig. Ohne 'nüscht' würde beispielsweise die Garbage Collection nicht laufen. Diese schmeißt ja alle Objekte weg, welche keine Referenz mehr auf sich haben. Und wie wird man eine Referenz auf ein zuvor erstelltes Objekt wieder los?

    Java
    instanceObject = null;


    Natürlich gibt es da Möglichkeiten.
    Man kann eine Methode meines Wissens so schreiben, dass eine Null-Referenz als Parameter sofort eine InvalidArgumentException zur Compilezeit auslöst.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

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