2016-11-02 12 views
-1

Ich versuche, die Daten von API zu lesen, füllen Sie diese in DB und zeigen Sie es in der Listenansicht. Ich bekomme immer noch den Index aus, aber ich bin mir nicht sicher warum. Buch ist die einfache Buchklasse mit step phoneNo und string name. Ich kann die Daten abrufen. Ich bekomme die richtige Ausgabe, wenn ich die Daten, die ich abrufe, drucke, aber ich bekomme immer wieder Probleme, wenn ich versuche, die Daten in die Datenbank einzufügen und sie abzurufen.Index außerhalb der Grenzen in Android

  List<Book> list = db.getAllBooks(); 
      for(int i = 0; i<4; i++) { 
       thatName[i] = list.get(i).getName(); 
       thatMobile[i] = list.get(i).getPhoneNo(); 
       Log.d("List 1", thatName[i]); 
       Log.d("List 2", thatMobile[i]); 
      } 

      customListViewAdapter = new CustomListViewAdapter(getApplication(),thatName,thatMobile); 

      listView.setAdapter(customListViewAdapter); 
    }; 

}

DB

public List<Book> getAllBooks() { 
    List<Book> books = new LinkedList<Book>(); 

    // 1. build the query 
    String query = "SELECT * FROM " + TABLE_BOOKS; 

    // 2. get reference to writable DB 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(query, null); 

    // 3. go over each row, build book and add it to list 
    Book book = null; 
    if (cursor.moveToFirst()) { 
     do { 
      book = new Book(); 
      book.setPhoneNo(cursor.getString(1)); 
      book.setName(cursor.getString(0)); 
      //book.setAuthor(cursor.getString(2)); 

      // Add book to books 
      books.add(book); 
     } while (cursor.moveToNext()); 
    } 

    Log.d("getAllBooks()", books.toString()); 

    // return books 
    return books; 
} 
+0

Post logcat bitte – JpCrow

+3

for (int i = 0; i < 4; i ++) Vielleicht haben Sie nicht 4 Bücher in der Datenbank? – Alex

Antwort

1

Sie angeben gibt es vier Elemente, die Sie werden Iterieren durch:

for(int i = 0; i<4; i++) { 
    thatName[i] = list.get(i).getName(); 
    thatMobile[i] = list.get(i).getPhoneNo(); 
    Log.d("List 1", thatName[i]); 
    Log.d("List 2", thatMobile[i]); 
} 

IndexOutOfBoundsException bedeutet, dass Sie ein Element abzurufen versuchen aus der Liste nach einem Index größer als der maximale Index in der Liste. Stattdessen können Sie versuchen, die Anzahl der Elemente in der Liste, herauszufinden:

for(int i = 0; i < list.size(); i++) 

oder einfach durch die Liste iterieren selbst:

for(Book book: list) 
+0

perfekt danke – john

Verwandte Themen