获取所有行SQLite Android Studio

时间:2017-02-22 06:08:56

标签: java android arrays sqlite object

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

该对象的构造函数和结构是:

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 个答案:

答案 0 :(得分:1)

索引应从 0 位置开始。

                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());
        }