我从sqlite数据库填充AChartEngine,我需要显示所有数据。我遇到的问题是当我删除一个记录时,图形系列停止填充已删除的记录。我需要找到一种方法来跳过已删除/空记录并继续填充我的图表。我需要它以同样的方式执行它,listview跳过已删除的记录并继续显示所有行。我对很多这方面都很陌生,并且在这方面遇到了非常困难的时期。我试图编写if语句以跳过已删除/空行但似乎没有任何效果。谢谢你的帮助!
在我的图表活动中:
for (int i = 1; !c.isAfterLast(); i++) {
String value1 = db.getValue1(i);
String value2 = db.getValue2(i);
c.moveToNext();
double x7 = Double.parseDouble(value1);
double y7 = Double.parseDouble(value2);
myseries.add(x7, y7);
}
我收到错误:CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
如果我使用try和catch环绕它将填充行直到删除的记录。
“EDIT” 在我的sqlite数据库中:
public String getValue1(long l) {
String[] columns = new String[]{ EMP_DEPT };
Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null);
if (c != null){
c.moveToFirst();
String value1 = c.getString(0);
return value1;
}
return null;
}
public String getValue2(long l) {
String[] columns = new String[]{ EMP_DATE1 };
Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null);
if (c != null){
c.moveToFirst();
String value2 = c.getString(0);
return value2;
}
return null;
}
答案 0 :(得分:0)
您应该使用单个查询一次获取所有值:
SELECT Date1 FROM MyTable WHERE id BETWEEN 1 AND 12345
或:
db.query(EMP_TABLE, columns, EMP_ID + " BETWEEN 1 AND " + ..., ...);
然后迭代光标时,不会显示缺失值。
答案 1 :(得分:0)
您的问题是,对于不存在的行上的命令的安全网是使用if (c != null){
然后在该块中执行命令,但是 Cursor
来自查询的请求永远不会出现null
,它将导致没有行的游标对象。
使用此作为您的安全网的更合适的解决方案if (c.moveToFirst()){
因为方法本身会返回boolean
,如果该方法实际上是首先实现的 - true
如果如果没有,它会移动false
(当没有行进入时会发生这种情况)。如果您愿意,可以查看光标与c.getCount()
的行数。
此外,您应该组合使用方法,以便不对数据库进行冗余查询:
public String[] getValues(long l) {
String[] results = new String[2];
String[] columns = new String[]{ EMP_DEPT, EMP_DATE1 };
Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null);
if (c.moveToFirst()) {
results[0] = c.getString(0);
results[1] = c.getString(1);
} else {
Log.d("GET_VALUES", "No results formed from this query!");
}
return results;
}