これは奇妙な問題であり、簡単な解決策があることを願っています。暗号化された値を持つデータベースがあります。テーブル内の各エントリを調べ、必要な列から値を復号化し、値を変数「total」に追加するカーソルを作成しました。列のすべての値の合計が必要です。コードは次のとおりです。
while (c.moveToNext())
{
strTotal = c.getString(c.getColumnIndexOrThrow(KEY_TOTAL));
strTotal = sc.decrypt(strTotal);
total = Float.valueOf(strTotal) + total;
}
さて、ここに奇妙な部分があります。データベースに2つの値があると仮定します:2 + 4.それぞれが復号化された後、正しく追加されます:6.ここで、値が等しい場合:2 + 2、たとえば、メソッドは代わりに「2」を返します「4」。これは、小数点以下の桁数がずれている場合でも発生します(たとえば、2 + 2.01 = 4.01ですが、2 + 2は2を出力します)。
ここに欠けているものはありますか?ありがとう!
編集:
復号化が問題であったかどうかを確認するためにコードを変更しましたが、それでも同じ結果が得られます。
float total = 0;
String strTotal = "10";
while (c.moveToNext())
{
try {
//strTotal = sc.decrypt(c.getString(c.getColumnIndex(KEY_TOTAL)));
total = Float.valueOf(strTotal) + total;
} catch (Exception e) {
Log.e(TAG, "exception", e);
}
}
データベースに3つのエントリがあるにもかかわらず、このコードは「10」を返します。データベースの2つの行のKEY_TOTALフィールドの値が同じである場合、返される結果は少なくなるようです。クエリは次のとおりです。
Cursor c = mDb.query(true, DATABASE_TABLE, new String[] {KEY_TOTAL}, KEY_TYPE + "=" + t, null, null, null, null, null);
dbをプルしてsqliteブラウザーで開き、すべての行をSELECTすると、3が表示されます。