2016-05-05 17 views
0

Ich habe eine Datenbank entwickelt. Hier ist mein Code:Android Cursor Initialisierung

Cursor cursor =database.query(ColumnID.AGENT_TABLE,null,null,null,null,null,null); 

     while (cursor.moveToNext()) { 
      County county = new County(); 
      county.setId(cursor.getString(cursor 
        .getColumnIndex(ColumnID.ID))); 
      county.setAgent_Name(cursor.getString(cursor 
        .getColumnIndex(ColumnID.AGENT_NAME))); 
      county.setAddress_Line_1(cursor.getString(cursor 
        .getColumnIndex(ColumnID.ADDRESS_LINE_1))); 


      countyList.add(county); 
     } 

Leider erhalte ich diese Fehlermeldung:

Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 

Referenz: Android Cursor initialization

+0

Es gibt [ziemlich viele ähnliche Fragen hier] (https://stackoverflow.com/search?q=Make+sure+the+Cursor+is+initialized+correctly + vor + Zugriff + Daten + von + es). – halfer

+0

Bitte schreiben Sie Ihren vollständigen Code @Raseem Ayatt – Lampard

Antwort

0

Ich bin nicht sicher, ob Sie die Fehler sind immer Da in der Datentabelle keine Datensätze vorhanden sind und Sie versuchen, "MoveToNext()" auf eine leere Menge zu setzen, oder wenn Sie auf die Abfrage nach Ergebnissen zugreifen, die nicht vorhanden sind.

Wenn es der ehemalige: Der Fehler scheint zu sein, weil keine Datensätze im Cursor sind, wenn Sie versuchen, moveToNext() den Datensatz nicht vorhanden ist. Es ist die SQLite-Version einer Nullzeiger-Ausnahme (sort of).

Stattdessen versuchen:

Cursor cursor =database.rawQuery("SELECT * FROM " + ColumnID.AGENT_TABLE); 

cursor.moveToFirst(); 
//this checks to make sure you don't have an empty set 
if(!cursor.isAfterLast()) 
{ 
    do{ 
     County county = new County(); 
     county.setId(cursor.getString(cursor 
      .getColumnIndex(ColumnID.ID))); 
     county.setAgent_Name(cursor.getString(cursor 
      .getColumnIndex(ColumnID.AGENT_NAME))); 
     county.setAddress_Line_1(cursor.getString(cursor 
      .getColumnIndex(ColumnID.ADDRESS_LINE_1))); 


     countyList.add(county); 
    }while(cursor.moveToNext()); 
} else{ 
    Log.v("MyTag", "There are no countries in the data set"); 
} 
+0

es funktioniert nicht –

+0

Vielen Dank seine Arbeit –

1
Cursor cursor =database.query(ColumnID.AGENT_TABLE,null,null,null,null,null,null); 

if (cursor.getCount() > 0) 
{ 
    cursor.moveToFirst(); 
    while (!cursor.isAfterLast()) 
    { 
     County county = new County(); 
     county.setId(cursor.getString(cursor 
      .getColumnIndex(ColumnID.ID))); 
     county.setAgent_Name(cursor.getString(cursor 
      .getColumnIndex(ColumnID.AGENT_NAME))); 
     county.setAddress_Line_1(cursor.getString(cursor 
      .getColumnIndex(ColumnID.ADDRESS_LINE_1))); 

     countyList.add(county); 
     cursor.moveToNext(); 
    } 
} 
+0

Warum überprüfen Sie die Zeilenanzahl? Sie können 'if (cursor.moveToFirst())' ... –

+0

Immer noch bekommen Fehler –

+0

im nicht überprüfen Zeilenanzahl und ich bin Tabellenwerte in Arraylist hinzufügen –