Null-Pointer-Exception in ListView - wird über Datenbank gefüllt

KleeSchulz

Neues Mitglied
Hallo Leute,

aktuell bekomm ich bei der letzten Kategorie in meiner ListView folgende Fehlermeldung


```
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.CheckedTextView.getText()' on a null object reference
at BLUB.App.saufio.MainActivity.gebeKategorie(MainActivity.java:362)
at BLUB.App.saufio.MainActivity.btn_zumSpiel(MainActivity.java:281)
```

Dies ist die Methode, bei der der Fehler auftritt. Es spielt keine Rolle, ob die Elemente mehrmals ausgewählt werden. Das Programm stürzt immer in der 4. Kategorie ab.

```
private String gebeKategorie(){
SparseBooleanArray sp = lv_kategorie.getCheckedItemPositions();
StringBuilder sb= new StringBuilder();
Log.i("INFO",sb.toString());
for(int i=0;i<sp.size();i++){
if(sp.valueAt(i)==true){
Log.i("HURE12",sb.toString());
sb.append("'");
String s;
try {
s = ((CheckedTextView) lv_kategorie.getChildAt(i)).getText().toString(); //line 362
} finally {
//TODO Bug beheben, Kategorien
//sb = sb.append("Sport");
}
sb = sb.append(s+"',");
}
}

if (sb.length()==0){
return "0";
}
else{
return sb.toString().substring(0, sb.length() - 1);
}
}
```

Das 4. Element wird gefüllt: Hier ist der Code. Um das Array zu füllen, verwenden Sie die Funktion:

Dies ist in der Main:

kategorie=db.getKategorien().toArray(new String[0])

und das ist die Methode get.kategorien:

public List<String> getKategorien() {
List<String> kategorieList = new ArrayList<String>();
String selectQuery = "SELECT max(" + KEY_KATEGORIE + ")," + KEY_KATEGORIE + " FROM " + TABLE_AUFGABE + " group by " + KEY_KATEGORIE + " order by " + KEY_ID;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
kategorieList.add(cursor.getString(0));
} while (cursor.moveToNext());
}
Log.i("Database", "Aufgabe Liste: " + kategorieList);
return kategorieList;
}

und hier die Methode initListViewKategorie

private void initListViewKategorie() {
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, kategorie);
lv_kategorie.setAdapter(arrayAdapter);
for (int i = 0; i < kategorie.length; i++) {
lv_kategorie.setItemChecked(i, false);
}
}

Ich habe versucht, den Fehler mit try and catch block abzufangen. Fügen Sie eine weitere letzte Kategorie hinzu, aber es ist nur in der 4. Kategorie
 

Jw456

Top Contributor
Java:
if (cursor.moveToFirst()) {
    do {
        kategorieList.add(cursor.getString(0));
    } while (cursor.moveToNext());
}

teste erstmal wie viele Elemente im Cursor sind und setze ihn dann auf Anfang.

Do While finde ich hier auch nicht sinnvoll die wird ja mindestens immer einmal durchlaufen auch wenn der Cuore am ende steht.

Ps
Java:
s = ((CheckedTextView) lv_kategorie.getChildAt(i)).getText().toString(); //line 362
was ist "lv_kategorie" ?
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben