0

sqliteデータベースから行を削除する際に奇妙な問題が発生しています。初めて行を削除しようとすると、正常に機能しているようです。ただし、その後はエラーが発生せず、選択した行が削除されません。アプリをアンインストールしてEclipseから再実行すると(テストのためにタブレットをPCに接続しています)、最初の削除が再び機能します。

これが、データベースからギャラリービューにデータを入力するために使用しているコードです。

Cursor cursor = _garmentAdapter.fetchAllLooks();

      cursor.moveToLast();
     final ArrayList<Bitmap> al = new ArrayList<Bitmap>();
      _labels=new ArrayList<String>();
      int totalGarments=0;
      for(int i=cursor.getCount()-1; i>=0; i--) {


        totalGarments++;
        Bitmap bd=BitmapFactory.decodeFile(cursor.getString(3));
        String label=cursor.getString(1);
        al.add(bd);
        _labels.add(label);



       cursor.moveToPrevious();
      }

      Toast.makeText(BrowseLooks.this, "ITEMS=="+totalGarments,     Toast.LENGTH_SHORT).show();

このトーストメッセージは、画面上のアイテムの数を表示しています。たとえば、3つのアイテムを作成してから、1を削除すると、画面に2が表示され、トーストにはITEMS==2と表示されます。ただし、別のアイテムを削除しても、画面には2つのアイテムがあり、ITEMS==2です。したがって、カーソルは正しく機能しているように見えますが、データベースは機能していません。

データベースの削除行のコードは次のとおりです。

return mDb.delete(LOOKS_TABLE, KEY_ROWID+"="+rowId, null)>0;

また、mDbが呼び出されたときにrowIdが正しいものとしてログに記録しました。

繰り返しになりますが、エラーは発生していません。コードが機能していないだけです。どんな助けでも大歓迎です。

4

2 に答える 2

2

これを試して

db.delete(LOOKS_TABLE, KEY_ROWID+ " = ?",
                new String[] { String.valueOf(rowId) });
于 2013-01-14T22:24:50.210 に答える
2

私は自分の問題に対する答えを見つけました。sqliteデータベースの自動インクリメントを完全には理解していませんでした。そのため、すでに空の行を削除していました。データベースが増加する方法は、現在の最高のエントリだけでなく、以前のすべてのエントリよりも高いエントリを作成することです。したがって、画面上のアイテムのインデックスがデータベーステーブルのインデックスに対応していませんでした。

于 2013-01-15T20:56:54.210 に答える