0

以下を解決することはできません。SQLiteデータベースに保存されているアイテムのリストとそれらのアイテムの名前があります。onContextItemSelectedメソッドを使用して、リスト上のアイテムを操作します(追加および削除)。これまでのところ、データベースに新しい名前を追加し、リストに新しいアイテムを反映するのに問題はありません。しかし、削除すると私は夢中になります。クリックして削除すると、リストからアイテムが削除されますが、データベースから名前を削除できませんでした。

これがコードです

       if (item.getItemId() == CM_DELETE_ID) {

                AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

                // delete item from list
                bazar.remove(acmi.position);

                // get clicked item id from list                    
                rowID = acmi.id;

                // open database          
                datasource.openToWrite();

                if (cursor != null) {

Log.d(LOG_TAG, "--- Delete from mytable: ---");     

//delete from database
datasource.db.delete(DBHelper.TABLE, DBHelper.COLUMN_ID + " = " + rowID, null);

Log.d(LOG_TAG, "deleted row = " + datasource.db.delete(DBHelper.TABLE, DBHelper.COLUMN_ID + " = " + rowID, null));                                        

                } else {
                    Log.d(LOG_TAG, "Cursor is null");
                    cursor.close();
                }
                // close database
                datasource.close();

                myAdapter.notifyDataSetChanged();

                return true;

ログによると

 05:12:08.403   1131    example.CustomAdapter   DEBUG       row inserted, ID = 1
05:12:08.413    1131    example.CustomAdapter   DEBUG       ID = 1, name = A1
05:12:22.853    1131    example.CustomAdapter   DEBUG       row inserted, ID = 2
05:12:22.864    1131    example.CustomAdapter   DEBUG       ID = 1, name = A1
05:12:22.864    1131    example.CustomAdapter   DEBUG       ID = 2, name = A2
05:12:23.623    111 jp.co.omronsoft.openwnn DEBUG   dalvikvm    GC_EXTERNAL_ALLOC freed 20K, 44% free 3471K/6151K, external 3902K/3936K, paused 169ms
05:12:41.833    1131    example.CustomAdapter   DEBUG       --- Delete from mytable: ---
05:12:41.984    1131    example.CustomAdapter   DEBUG       deleted row count = 0

onCreateには、所有しているすべてのアイテムを一覧表示するdbReadAllメソッドとbazar.add(new Bazar(names、R.drawable.unread));があります。私のArrayListです

    void dbReadAll() {

    bazar.add(new Bazar(names, R.drawable.unread));

    // подключаемся к базе данных для чтения данных
    datasource.openToRead();

    // получаем значение курсора        
    cursor = datasource.queryAll();

    if (cursor.moveToFirst()) {

        nameColIndex = cursor.getColumnIndex(DBHelper.COLUMN);

        do {

            Log.d(LOG_TAG, "ID = " + cursor.getInt(idColIndex) + ", name = " + cursor.getString(nameColIndex));

            names = cursor.getString(nameColIndex);

            bazar.add(new Bazar(names, R.drawable.unread));

        } while (cursor.moveToNext());

    } else {
        cursor.close();
        datasource.close();
    }
}
4

2 に答える 2

0

これを試して:

//delete from database
datasource.db.delete(DBHelper.TABLE, DBHelper.COLUMN_ID + "=?", new String[]{Long.toString(rowID)});

deleteステートメントは事前に準備されたクエリを使用しているようです詳細については、このsofの質問を参照してください

UPDATEがに変更さrowIdLong.toString(rowId)ました文字列配列に文字列を入力する必要がありました

于 2012-10-17T05:28:54.523 に答える
0

i think you are mapping the row id wrong, rowid may not equal acmi.id .

So what you can do is get row id from cursor

cursor.movetoPosition(acme.id);    
rowid = cursor.getLong(cursor.getColumnIndex(DBHelper.COLUMN_ID))
于 2012-10-17T06:15:56.163 に答える