2017-02-22 164 views
1

我在尝试从SQLite读取数据时遇到问题,我想将所有信息存储到已定义的对象(节点)数组中。获取所有行SQLite Android Studio

我的构造和结构,其目标是:

public node(int id, String name, String address, double x, double y, String type, String date){ 
    //Initialization 
    //.... 
} 

注:此对象的类显然已经定义的属性,setter和getter方法。数据库与该对象具有相同的结构(Int,String,String,Double,Double,String,String)。

所以,我的方法来获取所有的行,并将它们存储到我的数组:

public nodo[] getNodes() { 
    String selectQuery = "SELECT * FROM " + NAME_NODES; 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    node[] nodes = new node[cursor.getCount()]; 
    int con = 0; 

    if (cursor.moveToFirst()) { 
     while (cursor.moveToNext()) { 
      node temp = new node(
        cursor.getInt(1), 
        cursor.getString(2), 
        cursor.getString(3), 
        cursor.getDouble(4), 
        cursor.getDouble(5), 
        cursor.getString(6), 
        cursor.getString(7)); 
      nodes[con++] = temp; 
     } 
    } 
    cursor.close(); 
    db.close(); 
    Log.d(TAG, "SQLite data: " + nodes.toString()); 

    return nodes; 
} 

然后在其他类我把这个以前的方法,是这样的:

node[] nodes = db.getNodes(); 
String temp = node[0].getName(); 

但经过我得到一个错误:

<code>E/CursorWindow: Failed to read row 1, column 7 from a CursorWindow which has 2 rows, 7 columns. 
E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.motusk.AppMonitoreo, PID: 4410 
    java.lang.IllegalStateException: Couldn't read row 1, col 7 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
    at android.database.CursorWindow.nativeGetString(Native Method) 
    at android.database.CursorWindow.getString(CursorWindow.java:438) 
    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51) 
    at com.motus.AppMonitoreo.Controladores.SQLiteHandler.getNodes(SQLiteHandler.java:186)</code> 

我觉得主要的问题是在使用游标

+1

请你在光标光标= db.rawQuery(selectQuery,NULL)获得;光标?光标索引从0开始,并从1开始。请检查 –

+0

[单击此处。我希望这会帮助你](http://stackoverflow.com/a/41615670/7399521) –

+0

是的,是coursor索引从0开始,但现在我只得到1行 –

回答

1

索引应该从位置开始。

   cursor.getInt(0), 
       cursor.getString(1), 
       cursor.getString(2), 
       cursor.getDouble(3), 
       cursor.getDouble(4), 
       cursor.getString(5), 
       cursor.getString(6)); 

卸载旧应用程序并重新运行。

FYI

if (cursor.moveToFirst()) { 
      do { 

       node temp = new node 
       cursor.getInt(0), 
       ......... 
       ADD_ARRAY_LIST.add(temp); 

      } while (cursor.moveToNext()); 
     } 
+1

这解决了问题它无法读取第1行到第7列,但我在该数据库中有2行,而且只有一行。这可能是在if之前和之后,我需要创建数组的第一个元素和while中的下一个元素? –

+0

你可以做到这一点 –

+1

谢谢你,工作! –