我是新来的android开发,并遇到了删除SQLite表中的行,我一直没有找到解决方案的问题。当我尝试删除一行时,什么都没有发生。Android:从SQLite表中删除一行并更新ListView
在我的活动中,名为'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();
}
我使用吐司检查表是否已经改变,但显示器没有改变。 从 '将对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中 '当前' 是用于填充ListView列表。我的想法是,我将能够从表中删除一行,然后重新填充此列表以及ListView。我也很好奇,一旦删除了一行,SQLite表发生了什么变化;其他的行是向上移动一个位置,还是留在同一个地方?
我对此仍然很陌生,所以对我的问题或其他代码的提示的任何帮助将非常感激。让我知道我的编程有什么问题。
我想通了我的代码有什么问题;我没有正确理解自动增量如何工作。我的印象是,通过删除一行,上面的所有行都会减1。这让我相信我能够拥有一个与我的表中的行ID相对应的数组列表。你知道我的原始信念可以实现吗? –
这样做会违背数据库的原则,行标识在整个生命周期中都是唯一的,为什么不将数据填充到某种类型的HashMap或Dictionary类型的东西中? – FabianCook