0

我正在从 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 and catch 包围它,它将填充行直到删除的记录。

我的 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;
    }
4

2 回答 2

0

您应该使用单个查询一次获取所有值:

SELECT Date1 FROM MyTable WHERE id BETWEEN 1 AND 12345

或者:

db.query(EMP_TABLE, columns, EMP_ID + " BETWEEN 1 AND " + ..., ...);

然后,当您遍历光标时,缺失值将不会显示。

于 2013-01-17T23:05:46.370 回答
0

您的问题是,您对不存在的行上的命令的安全网是使用if (c != null){然后在该块内执行您的命令,但是来自查询的Cursor请求永远不会出现null,而是会导致没有行的游标对象.

将其用作安全网的更合适的解决方案因为如果该方法实际上首先执行了它,则该if (c.moveToFirst()){方法本身返回一个for -如果它移动了,如果没有(当没有行可以移动时发生)。如果您愿意,另一个检查是查看游标有多少行。booleantruefalsec.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;
}
于 2013-01-17T23:06:14.963 回答