gpt4 book ai didi

Android SQL 查询无法识别第一个条目

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:26 25 4
gpt4 key购买 nike

系好安全带,这很奇怪。我目前正在开发一个涉及在 sqlite 数据库中存储和检索数据的 android 应用程序。我正在浏览该应用程序并测试一些基本功能以确保一切正常,然后你瞧,我发现了一个从我的数据库中检索数据的错误。当用户在应用程序中输入他们的第一个条目时,一切都按预期进行,值得到处理和存储。但是,当我返回并尝试使用 SELECT * FROM history; 访问该数据时当我调用 data.moveToNext() 时,我得到一个返回 true 的游标,但是当我使用 while(data.moveToNext()) { //get values and add to a List<> } 遍历它时while 循环永远不会执行。

在将文件移动到我的计算机并使用 this 打开数据库后,我查看了数据库的内容db 浏览器,我可以看到我的条目。

这是我调用以从我的数据库中获取所有点的方法:

List<PointValue> getAllPoints() {
List<PointValue> points;
Cursor data = rawQuery("SELECT * FROM history");
if (data.moveToNext()) {
points = new ArrayList<>();
while (data.moveToNext()) {
System.out.println("Looped");
long timestamp = data.getLong(data.getColumnIndexOrThrow("timestamp"));
int level = data.getInt(data.getColumnIndexOrThrow("level"));
points.add(new PointValue(timestamp, level));
}
} else {
return null;
}
data.close();
if (points.size() == 0) {
return null;
}
return points;
}

rawQuery方法如下所示:

private Cursor rawQuery(String sql) {
SQLiteDatabase db = this.getReadableDatabase();
return db.rawQuery(sql, null);
}

当我尝试自己调试时,points 的大小是 0,即使我知道数据库中至少有一个点。想法?包含我所有与 sql 相关的东西的类扩展了 SQLiteOpenHelper

编辑:这是@Isaac Payne 建议的解决方案(仍然无效):

public List<PointValue> getAllPoints() {
List<PointValue> points = new ArrayList<>();
Cursor data = rawQuery("SELECT * FROM history");

while (data.moveToNext()) {
long timestamp = data.getLong(data.getColumnIndexOrThrow("timestamp"));
int level = data.getInt(data.getColumnIndexOrThrow("level"));
points.add(new PointValue(timestamp, level));
}
data.close();
if (points.size() == 0) {
return null;
}
return points;
}

最佳答案

问题是,当您在 if 语句中调用 data.moveToNext() 时,您正在移动到第一个条目,然后您再次调用 moveToNext() while 循环移动到第二个不存在的条目。尝试删除 if 语句

关于Android SQL 查询无法识别第一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41353168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com