Search View -> NullPointerException

  • Guten Abend,
    Ich hätte da mal eine Frage die mich doch vor eine gewisse Verwunderung stellt...
    Und zwar habe ich auf einer website (http://abhiandroid.com/ui/searchview) eine schöne Anleitung für so eine Fragmentsuche gefunden.
    Probiert, funktioniert.
    Nun habe ich das mal für meine Wünsche umgeschrieben:












    Der XML Code ist für die Main (in meinem fall Tabelle) gleich geblieben. Die list_view_items hab ich dahingehend verändert dass es nun 5 textviews sind (titel, erscheinungsjahr, laufzeit, fsk, server)



    Im Grunde das gleiche wie auch auf der Website... wenn ich das ganze nun starte sind alle filme zu sehen.
    Gebe ich nun etwas in die Suchleiste ein (buchstaben werden nicht angezeigt) hängt sich die app auf und stürtzt mit der Meldung:


    E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.niklas.medienlister, PID: 26091
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.niklas.medienlister.DVD.getTitel()' on a null object reference
    at com.example.niklas.medienlister.ListViewAdapter.filter(ListViewAdapter.java:91)
    at com.example.niklas.medienlister.Suche.onQueryTextChange(Suche.java:60)
    at android.widget.SearchView.onTextChanged(SearchView.java:1349)
    at android.widget.SearchView.-wrap9(SearchView.java)
    at android.widget.SearchView$9.onTextChanged(SearchView.java:1937)
    at android.widget.TextView.sendOnTextChanged(TextView.java:9404)
    at android.widget.TextView.handleTextChanged(TextView.java:9481)
    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:12320)
    at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1208)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:578)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:509)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:508)
    at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:850)
    at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:200)
    at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:183)
    at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:345)
    at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:91)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6692)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)


    ab... Ich verstehe ja an sich was mir die app sagen will... aber wenn das null wäre würde ich doch keine Liste angezeigt bekommen oder?




    ListViewAdapter Z. 91:

    Java
    for (DVD wp : arraylist) {
    
    
    if (wp.getTitel().toLowerCase(Locale.getDefault()).contains(charText) || wp.getJahr().toLowerCase(Locale.getDefault()).contains(charText) || wp.getZeit().toLowerCase(Locale.getDefault()).contains(charText) || wp.getFSK().toLowerCase(Locale.getDefault()).contains(charText) || wp.getServer().toLowerCase(Locale.getDefault()).contains(charText)) {
    
    
    filmList.add(wp);
    
    
    }


    Suche Z. 60:



    Habt ihr eine Idee was daran nun falsch sein kann?Ich bin für jede Hilfe dankbar!
    LG.Greg

  • Lösung gefunden!


  • Toll ist das du es selber gefunden hast. :) nur wären ein paar Zeilen zur Erklärung, vor allen für die Anfänger nicht schlecht gewesen. Was falsch war und warum Du die nullpionterexeption bekommen hast, nicht schlecht gewesen. Ist aber trotzdem sehr lobnenswert das du uns die Lösung mitteilst.


    Allso klar ist das Mann im Klassenrunpf Variablen nich werte zuweisen kann. Außer primitiven Variablen wie "int". Das ist halt in Java oder auch anderen oop sprachen so. Arraylist ist selbst eine Klasse und ihr sollte nur in einer Methode werte zugewiesen ( Initialisiert) werden.
    Im Klassenrunpf sollten nur (Deklarationen) von Variablen die dann globale in der Klasse sind stehen. Arber keine Initialisierung dafür ist der Konstrucktor da,
    das ist eigentlich Objekt orientierte Programmierung Grundwissen.

  • Die Erklärung ist tatsächlich sehr simple...


    Und zwar hab ich vergessen die arraylist mit den Werten des arrays zu füllen._.


    Das war tatsächlich das ganze Problem...


    Aber vielleicht könnt ihr mir ja jetzt doch nochmal weiter helfen.


    Derzeit sortiere ich meinen DVD [ ] mit einem Bubble sort... das ist aber ziemlich Zeitaufwendig bei 4000 stellen...


    Mit arrays.sort geht es ja auch nicht, da ich den array ja nach dem ersten String der DVD objekte sortieren will...
    meine Frage nun: eine schnelle und einfache Methode um einen Objekt array zu sortieren?!


    Lg.
    Greg

  • Hi,
    Erstmal danke für die Antwort :)
    Die Sache ist, ich kann ja auch Arrays.sort machen... das ist doch das gleiche wie Collection.sort


    Das Problem ist das es sich ja um keinen String array handelt, sondern einen Objekt array DVD

    Java
    package com.example.niklas.medienlister;public class DVD { public String titel; public String erscheinungsjahr; public String laufzeit; public String fsk; public String server; public DVD(String titel, String erscheinungsjahr, String laufzeit, String fsk, String server) { this.titel = titel; this.erscheinungsjahr = erscheinungsjahr; this.laufzeit = laufzeit; this.fsk = fsk; this.server = server; } public String getTitel() { return this.titel; } public String getJahr() { return this.erscheinungsjahr; } public String getZeit() { return this.laufzeit; } public String getFSK() { return this.fsk; } public String getServer() { return this.server; }}

    Und soetiert werden soll nach dem ersten Parameter Titel. Weißt du was ich meine?
    LG
    Greg

Jetzt mitmachen!

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