2016-06-05 20 views
0

Ich versuche Artikel aus RecyclerView Liste zu entfernen, die von SQLite DB bestückt ist und immer diese Fehlermeldung:Android RecyclerView Datenbank entfernen Artikel

java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1 

Der Code, den ich mit bin versucht, mit Daten arbeiten, die nicht besiedelt ist aus der SQLite-Datenbank, aber in diesem Fall stürzt es bei langem Klick ab. Hier ist mein Code:

@Override 
    public void onBindViewHolder(RecHolder holder, final int position) { 
     final Todo item = listData.get(position); 

     final int currentPosition = position; 
     final Todo infoData = listData.get(position); 

     holder.container.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       removeData(infoData); 
       return true; 
      } 
     }); 

    } 

    private void removeData(Todo infoData) { 
     int position = dbTodo.indexOf(infoData); 
     dbTodo.remove(position); 
     notifyItemRemoved(position); 
    } 

Kann mir jemand dabei helfen?

SOLUTION

Ich habe mit diesem db.Todo in removeData(), sollte es listData wie in inicialisation sein vermasselt.

Antwort

0

Der Fehler bedeutet, dass infoData nicht in den dbTodo gefunden wird - daher indexOf kehrt -1, und so in der nachfolgenden Zeile, Sie etwas an dem Index -1 (die obvisouly außerhalb der Grenzen ist) entfernen. Um diesen Fehler zu beheben, müssen Sie nur überprüfen, dass infoData vorhanden ist, bevor Sie versuchen, es zu entfernen.

private void removeData(Todo infoData) { 
     int position = dbTodo.indexOf(infoData); 
     //here you check that it exists before you try to remove it 
     if(position >= -1){ 
     dbTodo.remove(position); 
     notifyItemRemoved(position); 
     } 
     else{ 
      //do something else here? 
     } 
    } 

Ich hoffe, das hilft Ihnen.

0

Es ist klar, dass die Position, die Sie verwenden wollten, um Artikel zu erhalten, falsch ist.

dbTodo.indexOf(infoData) 

geben Sie -1 zurück, wenn es nicht Objekt finden Infodata haben, so dass Sie sich zur Auswahl: 1) Überprüfen Sie Position, bevor Objekt aus der Datenbank

if(position >= -1){ 
    dbTodo.remove(position); 
    ...... 

2) Überprüfen Sie Infodata zu entfernen versuchen, ist wirklich in der Datenbank vor dem Versuch, es zu entfernen.

Verwandte Themen