2017-08-31 147 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

这是我从添加数据:

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

从我的textview动态地。 –

+0

张贴代码请 –

回答

1

在你的代码itemDeleteFromDatabase(position);位置是不是你ID这是在你的数据库。如果你想删除的基础上ID那么你必须得到ID阵列,你在RecyclerView绑定。

如果您直接使用数据库中的Curosr绑定RecyclerView,则必须在itemDeleteFromDatabase函数中通过long id。因为它会返回数据库的自动索引ID。

+0

我没有使用RecyclerView,我想如何从数据库中获取ID并相应地删除该行? –

+0

如果你绑定基于Cursor的列表,然后使用'long id'作为你的删除函数的参数。它会根据该id从数据库中删除项目。这个'id'不过是它的一个数据库的auto_id。 –

+0

你有什么我正试图对你说? –

相关问题