android上的光标没有返回任何行。

时间:2013-07-04 07:07:44

标签: android sqlite cursor rows

我正在使用Sqlite数据库在Android上制作应用程序。 基本上,应用程序只是插入一些数字然后导航所有行以获得这些数字的总和。每次点击按钮都会这样做。

但问题是,实际上应用程序运行良好。我只是改变了一张小图片,然后在我的手机上再次运行应用程序,但随后又停止了这些数字的总和。我使用调试选项来查看数字是否正确插入,实际上是。但我发现光标没有从查询中获取任何行。我不知道问题是什么。我真的不记得改变代码,只是用油漆改变图片。我查了行名,表名和一切都没问题。我甚至在绝望的爆发中做了ctrl + z,但没有任何改变。我从我的手机上取消了应用程序,清理,构建然后再次运行并获得相同的结果。

这是此操作中涉及的代码。

public void crearTablas (SQLiteDatabase bd){
    bd.execSQL("Create Table If Not Exists Gasto (ID Integer Primary Key, Descripcion Text Not Null, Costo Real Not Null, Fecha_Creado Datetime not null);");
}


public void insertarGasto(String descripcion, double costo, String fechaCreado{
    ContentValues valores=new ContentValues();
    valores.putNull("ID");
    valores.put("Descripcion", descripcion);
    valores.put("Costo", costo);
    valores.put("Fecha_Creado", fechaCreado);
    bd.insert("Gasto", null, valores);
}


public void crearGastoVar(String descripcion, double costo){
    //redondear(double) is working well, i verified it!
    bd.insertarGasto(descripcion, this.redondear(costo), fecha.get(Calendar.DATE)+"-"+(fecha.get(Calendar.MONTH)+1)+"-"+fecha.get(Calendar.YEAR));
}

public Cursor obtenerGastosVar(String fecha1, String fecha2){
    return bd.query("Gasto", null, "Fecha_Creado between '"+fecha1+ "' and '"+fecha2+"'", null, null, null, null, null);
}


public double caluclarCostoGstsVar(){
    Cursor c = bd.obtenerGastosVar("1-"+(fecha.get(Calendar.MONTH)+1)+"-"+fecha.get(Calendar.YEAR), 
            fecha.getActualMaximum(Calendar.DAY_OF_MONTH)+"-"+(fecha.get(Calendar.MONTH)+1)+"-"+fecha.get(Calendar.YEAR));
    double costo=0;
    if(c.moveToFirst()){ //This is returning false!!
        do{
            try{
                Log.i("Look", "Sum is:"+costo);
                costo+=Double.parseDouble(c.getString(c.getColumnIndex("Costo")));
            }
            catch(NumberFormatException e){
                Log.i("Look", "Types are wrong");
                return -2;
            }

        }while(c.moveToNext());

    }


    return redondear(costo);
}


String descrip_ = "number1";
double costo_ = 1000;

//I called before, crearTablas() so the tables are created before start inserting and reading

admin.crearGastoVar(descrip_, costo_);

admin.caluclarCostoGstsVar();

2 个答案:

答案 0 :(得分:0)

尝试使用此格式提供的数据库已正确创建

if (cursor != null) {

      if (cursor.moveToFirst()) {

          do {
                       //your code

              }

           while (cursor.moveToNext());

         }

  cursor.close();

希望有所帮助

答案 1 :(得分:0)

日期/时间可以存储在several formats中,但如果您使用字符串并想要比较它们,则必须使用yyyy-mm-dd之类的格式(带填充字段和首先是最重要的领域)因为否则,字符串比较不会给出正确的结果。

可以使用简单的while循环读取游标:

Cursor c = ...;
while (c.moveToNext()) {
    ...
}
c.close();

query之类的函数永远不会返回null光标,而moveToNext对于位于第一个条目之前的光标执行正确的操作。)