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
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