【发布时间】:2017-07-12 01:20:56
【问题描述】:
我在尝试从 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>
我认为主要问题在于光标的使用
【问题讨论】:
-
请检查您在 Cursor 中得到的内容 cursor = db.rawQuery(selectQuery, null);光标?和光标索引从 0 开始,你从 1 开始。请检查
-
[点击这里。我希望这会对你有所帮助](stackoverflow.com/a/41615670/7399521)
-
是的,游标索引是从 0 开始的,但是现在我只得到 1 行
标签: java android arrays sqlite object