【发布时间】:2015-08-02 11:51:50
【问题描述】:
我需要从 ListView 中永久删除一个项目,然后再从数据库中删除。我有一个 DatabaseHandler.java 类,它的删除功能为:
// Deleting single contact, in DatabaseHandler.java class
public void deleteContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
new String[] { String.valueOf(contact.getID()) });
db.close();
}
然后我有一个FriendList.java 类,当用户的朋友在ListView 中显示为一个项目。当我长按某个项目时,我会在对话框中获得“删除”和“取消”选项。现在,当我单击删除时,该项目会从 ListView 中删除,但不会从数据库中删除。我怎样才能从数据库中删除它? 获取“删除”和“取消”选项的代码
listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int position, long id) {
// TODO Auto-generated method stub
Intent i = new Intent(FriendList.this, Delete_Confirm.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
//I am sending position of listitem in putExtra below//
i.putExtra("position", position);
startActivityForResult(i,CONFIRM);
item2 = (String) arg0.getItemAtPosition(position);
//Toast.makeText(FriendList.this, "Clicked"+item2, Toast.LENGTH_SHORT).show();
int l = item2.length();
c=0;
for(int j=0; j<=l; j++){
if(item2.charAt(j) != '9' || item2.charAt(j+1) != '1'){
c++;
}
else {
//Do nothing
break;
}
num = item2.substring(c, l);
}
Toast.makeText(FriendList.this, "Clicked: "+num, Toast.LENGTH_SHORT).show();
return true;
}
});
onActivityResult对应的代码如下:
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (CONFIRM) :
if(resultCode==RESULT_OK){
int posi = data.getIntExtra("position",0);
Log.d("msg","position is " + posi);
Log.d("msg","Do we reach here?");
final StableArrayAdapter adapter = new StableArrayAdapter(this,
android.R.layout.simple_list_item_1, list);
//db.deleteContact(posi);
list.remove(posi);
listview.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
break;
}}
请建议我如何从数据库中删除它。任何帮助将不胜感激。
编辑: 在取消注释 db.deleteContact(posi) 时,我收到以下错误: DatabaseHandler类型中的deleteContact(Contact)方法不适用于参数(int)
请注意,deleteContact 函数有 Contact 类型的联系人变量。
【问题讨论】:
-
为什么 db.deleteContact(posi) 被注释掉了?
-
@SnapDragon:因为它没有从数据库中删除联系人,我不知道为什么:(。它导致应用程序崩溃,所以,我评论它继续调试。
-
请在应用崩溃时发布日志
-
@user1903022 只需取消注释该行并发布堆栈跟踪。
-
@user1903022,不要在 UI 线程中访问数据库。这可能会导致崩溃。