2017-08-31 13 views
0

この質問はおそらく以前に聞かれたかもしれませんが、他の質問には似たようなコードはありませんでした。私のSQLiteテーブルは非常にシンプルです。私はIDとTO_DO_NAMEカラムを持ち、ListItemがonLongClick()を呼び出しているときにローを削除したいのです。私は既に長いクリック機能を実装していますが、アプリを再起動すると同じ項目が表示されます。これは私のDatabaseHelperです:AndroidのSQLiteデータベースから行を削除できません

public class DatabaseHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME = "todo.db"; 
    public static final String TABLE_NAME = "student"; 
    public static final String ID = "id"; 
    public static final String TO_DO = "todo"; 

    public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     String CREATE_TO_DO_TABLE = "CREATE TABLE " 
       + TABLE_NAME 
       + "(" 
       + ID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
       + TO_DO 
       + " TEXT" 
       + ")"; 
     sqLiteDatabase.execSQL(CREATE_TO_DO_TABLE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { 
     sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
     onCreate(sqLiteDatabase); 
    } 

    public boolean insertData(String todo) { 
     SQLiteDatabase sqLiteDatabase = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(TO_DO, todo); 
     long result = sqLiteDatabase.insert(TABLE_NAME, null, contentValues); 

     if (result == -1) { 
      return false; 
     } else { 
      return true; 
     } 
    } 

    public Cursor getListContents() { 
     SQLiteDatabase sqLiteDatabase = this.getWritableDatabase(); 
     Cursor data = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE_NAME, null); 
     return data; 
    } 
} 

そして、これが削除単一の行の世話をする私の更新方法である:私は私のリスト項目の長いクリックからメソッドを呼んでいる

public int itemDeleteFromDatabase(long id) { 
    SQLiteDatabase database = databaseHelper.getWritableDatabase(); 
    int deleteFromDatabase = database.delete(TABLE_NAME, ID + "=" + id, null); 
    listItems.setAdapter(adapter); 
    return deleteFromDatabase; 
} 

listItems.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> adapter, View item, int position, long id) { 
       toDoItems.remove(position); 
       itemDeleteFromDatabase(position); 
       MainActivity.this.adapter.notifyDataSetChanged(); 
       return true; 
      } 
     }); 

私が言ったように、それはまだあります。

UPDATE

これは私がからデータを追加しているところである:あなたのコードitemDeleteFromDatabase(position);位置に

public void addItem(View v){ 
     EditText newItem = (EditText) findViewById(R.id.itemInputEditText); 
     String item = newItem.getText().toString(); 
     databaseHelper.insertData(item); 
     adapter.add(item); 
     newItem.setText(""); 
    } 
+0

どこからsqliteにデータを追加していますか? –

+0

私のテキストビューから動的に。 –

+0

投稿コード –

答えて

1

は、データベースにある自分のIDではありません。 IDに基づいて削除する場合は、RecyclerViewでバインドする配列からIDを取得する必要があります。

データベースからCurosrを直接使用してRecyclerViewをバインドする場合は、itemDeleteFromDatabase関数にlong idを渡す必要があります。これはデータベースの自動インデックスIDを返すためです。

+0

私はRecyclerViewを使用していません。データベースからIDを取得し、それに応じて行を削除する方法を教えてください。 –

+0

Cursorに基づいてリストをバインドし、delete関数のパラメータとして 'long id'を使用するとします。その 'id'に基づいてデータベースからアイテムを削除します。この 'id'はあなたのデータベースのauto_idです。 –

+0

私はあなたに言っていることを正確に何か持っていますか? –

関連する問題