Android:从SQLite表中删除一行并更新ListView

时间:2013-08-02 01:06:10

标签: android sqlite

我是Android开发新手,遇到了删除SQLite表中我无法找到解决方案的行的问题。当我尝试删除一行时,没有发生任何事情。

在我的名为“MainActivity”的活动中,我使用上下文菜单调用方法从列表中删除项目。这部分代码如下:

case R.id.delete_program:
DBAdapter adap = new DBAdapter(this);
adap.open();
long pass = (long) (position + 1);
adap.removeFromCurrent(pass);
adap.close();   

Runnable run = new Runnable() {
    public void run(){                      
        refreshCurrent(getApplicationContext());
    }
};
runOnUiThread(run);
proAdapt.notifyDataSetChanged();
   return true;  

在'DBAdapter'中方法removeFromCurrent():

public boolean removeFromCurrent(long cp_id) {

    return this.dB.delete(PROGRAMS_TABLE, CP_ID + '=' + cp_id, null) > 0;
}

在'MainActivity'中方法refreshCurrent():

public static void refreshCurrent(Context context) {        
    CURRENT.clear();
    DBAdapter adap = new DBAdapter(context);
    adap.open();        
    ArrayList<Program> temp = adap.getCurrentPrograms();
    for(Program item : temp) {
        Toast.makeText(context, "Item added: " + item.getName(), Toast.LENGTH_SHORT).show();
        CURRENT.add(item);
    }
    adap.close();       
}

我正在使用toast来检查表是否已更改但显示器是否已更改。 从'DBAdapter'获取方法getCurrentPrograms():

public ArrayList<Program> getCurrentPrograms() { 
    ArrayList<Program> list = new ArrayList<Program>();

    Cursor cursor =
            this.dB.query(PROGRAMS_TABLE, new String[] {
                    CP_ID, CP_NAME, ACTUAL_DAY, D_ID, CP_CYCLE, CP_DAY_ONE }, 
                    null, null, null, null, null);

    int rows = cursor.getCount();

    if(cursor != null) 
        cursor.moveToFirst();       

    for(int i = 1; i <= rows; i++) {
        list.add(new Program(cursor.getString(cursor.getColumnIndex(CP_NAME)), 
                cursor.getInt(cursor.getColumnIndex(ACTUAL_DAY)), 
                cursor.getInt(cursor.getColumnIndex(CP_DAY_ONE)),
                cursor.getInt(cursor.getColumnIndex(CP_CYCLE))));
        cursor.moveToNext();
    }                   
    return list;
}

ArrayList'CURRENT'是用于填充ListView的列表。我的想法是,我可以从表中删除一行,然后重新填充此列表以及ListView。我也很好奇一旦删除了一行,SQLite表会发生什么。其他行向上移动,还是留在同一个地方?

我对此仍然很陌生,所以对我的问题的任何帮助或我的其余代码的提示都将非常感激。让我知道我的编程还有什么问题。

1 个答案:

答案 0 :(得分:0)

如果您使用的是SQLiteOpenHelper,那么您应该获得SQLiteDatabase个对象然后使用交易,如果您没有将其设置为成功,那么什么都不会发生

SQLiteDatabase db = mDbHelper.getWritableDatabase();
db.beginTransaction();
//Do stuff
db.setTrasactionSuccessfull();
db.endTransaction();

另外我认为当你将null传递给where子句时,哪里无关紧要。

你应该有db.delete("tbl", "id=?", new String[]{String.valueOf(id)});

之类的东西