通过Context Menu的onContextItemSelected()方法删除SQLite记录

时间:2014-07-12 14:45:50

标签: java android sqlite contextmenu

我正在Android中构建一个笔记应用程序。我已经在应用程序中开发了笔记的插入,这是我通过SQLite数据库完成的。现在我想通过上下文菜单从SQLite数据库中删除特定的注释。当用户长按app中的任何记录时,它将通过上下文菜单,其中包含"删除"选项。现在,我的问题是我能够从列表视图中删除项目,但它没有从数据库中删除。

这是我的代码:

MainActivity.java:

@Override
public boolean onContextItemSelected(MenuItem item) {
    int position;
    super.onContextItemSelected(item);

    if(item.getTitle().equals("Delete")) {
        //Add code
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();  
        position = (int)info.id;  
        //Notes note_id = (Notes)adapter.getNote(info.position);
        db.deleteNote(new Notes(position));

        list.remove(position);  
        this.adapter.notifyDataSetChanged();  
    }
    return true;
};

DatabaseHandler.java:

package com.amitmerchant.notesapp;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "notesManager";
private static final String TABLE_NOTES = "notes";

private static final String KEY_ID = "_id";
private static final String KEY_NOTE = "note";
private static final String KEY_DATE = "date_added";

public DatabaseHandler(Context context){
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db){
    String CREATE_NOTES_TABLE = "CREATE TABLE "+TABLE_NOTES+"("+KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+KEY_NOTE+" TEXT,"+KEY_DATE+" DATE"+")";
    db.execSQL(CREATE_NOTES_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NOTES);

    // Create tables again
    onCreate(db);
}

// Adding new contact
public void addNote(Notes note) {

    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NOTE, note.getNote()); // Contact Name
       // Inserting Row
    db.insert(TABLE_NOTES, null, values);
    db.close(); // Closing database connection
}

// Getting single contact
public Notes getNote(int id) {

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_NOTES, new String[] { KEY_ID,
            KEY_NOTE, KEY_DATE }, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    Notes note = new Notes(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1));
    // return contact
    return note;
}

// Getting All Contacts
public List<Notes> getAllNotes() {
    List<Notes> noteList = new ArrayList<Notes>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_NOTES;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Notes note = new Notes();
            note.setId(Integer.parseInt(cursor.getString(0)));
            note.setNote(cursor.getString(1));
            // Adding contact to list
            noteList.add(note);
        } while (cursor.moveToNext());
    }

    // return contact list
    return noteList;
}

// Getting contacts Count
public int getNotesCount() {

    String countQuery = "SELECT  * FROM " + TABLE_NOTES;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();

    // return count
    return cursor.getCount();
}
// Updating single contact
public int updateNote(Notes note) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NOTE, note.getNote());

    // updating row
    return db.update(TABLE_NOTES, values, KEY_ID + " = ?",
            new String[] { String.valueOf(note.getId()) });
}

// Deleting single contact
public void deleteNote(Notes note) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_NOTES, KEY_ID + " = ?",
            new String[] { String.valueOf(note.getId()) });
    db.close();
}

}

Notes.java

package com.amitmerchant.notesapp;

public class Notes {
// private variables
int _id;
String _note;
String _note_date;

// Empty constructor
public Notes() {

}

public Notes(int id, String _note) {
    this._id = id;
    this._note = _note;
}

public Notes(String _note) {
    this._note = _note;
}

public Notes(int id) {
    this._id = id;
}

public int getId() {
    return this._id;
}

public void setId(int id) {
    this._id = id;
}

public String getNote() {
    return this._note;
}

public void setNote(String note) {
    this._note = note;
}
}

伙计们,我在这里做错了什么?请指正。谢谢!

0 个答案:

没有答案