0

Androidでアプリを作成しており、Sqliteデータベースを使用しています。基本的に、アプリはいくつかの数値を挿入するだけで、すべての行をナビゲートしてこれらの数値の合計を取得します。ボタンがクリックされるたびにそれを行います。

しかし問題は、実際にはアプリがうまく機能していたことです。少し画像を変更してから、携帯電話でアプリを再度実行しましたが、これらの数値の合計を作成しなくなりました。デバッグ オプションを使用して、数値が正しく挿入されているかどうか、および実際に挿入されているかどうかを確認しました。しかし、カーソルがクエリから行を取得していないことがわかりました。何が問題なのかわからない。コードを変更したことを本当に覚えていません。ペイントで画像を変更しただけです。行名、テーブル名を確認しましたが、すべて問題ありません。私は絶望的なバーストで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();
4

2 に答える 2

0

データベースが適切に作成されている場合は、この形式を試してください

if (cursor != null) {

      if (cursor.moveToFirst()) {

          do {
                       //your code

              }

           while (cursor.moveToNext());

         }

  cursor.close();

それが役に立てば幸い

于 2013-07-04T07:33:01.540 に答える