删除ListActivity android中的数据库条目

时间:2013-02-08 19:25:02

标签: android database

我可以请求帮助......我设法将数据添加到数据库..但我有问题删除数据...因为我无法根据我的ListView中的ID删除...如何获取ID ?? ..这是我的代码..

此类名称为ViewActivity.java,其中i显示我的数据库内容...我只在我的ListView中显示一列

   String query = "select * from " + helper.TABLE_PEKERJA;

        Cursor c = database.rawQuery(query, null);

        if(c!=null)
        {
            c.moveToFirst();
            int getNamaIndex = c.getColumnIndex(helper.COL_NAMA);

            if(c.isFirst())
            {
                do{
                    String nama = c.getString(getNamaIndex);
                    result.add(nama);
                }while(c.moveToNext());
            }
        }

        this.setListAdapter(new ArrayAdapter(this,  android.R.layout.simple_list_item_1,result));
        getListView().setTextFilterEnabled(true);

在我的DBHelper中,我创建了一个从我的数据库表中删除行的方法,这是在这里..

public void deleteData(SQLiteDatabase db, String id)
{
    db.delete(TABLE_PEKERJA, COL_ID + " = " +id, null);
}

然后仍然在ViewActivity.java类中,我实现了onListItemClick方法

    @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    DBHelper helper = new DBHelper(this);
    database = helper.getWritableDatabase();        

    Object o = this.getListAdapter().getItem(position);
    String keyword = o.toString();
    helper.deleteData(database, keyword);
    Toast.makeText(this, "Data " + keyword + " removed" , Toast.LENGTH_SHORT).show();

}

也有这个错误..这个错误只有我可以查看...部分

的错误
Object o = this.getListAdapter().getItem(position);

02-09 02:34:23.729: E/Database(28923):  at com.example.untukmuna.ViewContentActivity.onListItemClick(ViewContentActivity.java:69)

所以,我的问题是

1)当我根据ID在ListView中按项目时,如何删除我的数据库表行 2)创建数据库时,有db.open()...但是我应该在哪里关闭数据库购买put db.close()...... ??

谢谢~~希望大家都明白我的问题.. ^ _ ^

1 个答案:

答案 0 :(得分:0)

传统方式是你只需从列表点击参数中获取id

protected void onListItemClick(ListView l, View v, int position, long id) <------

但是您无法立即执行此操作,因为ListViewArrayAdapter而不是CursorAdapter相关联。现在,id将始终为0或某些无意义值。如果您需要执行此类任务,我建议您更换适配器。

但是如果你需要你的适配器,那么你可以做的是制作一个相应的id集合,当你循环遍历数据库以填充result时,你会收集这些集合。然后,就像从position参数中获取onListItemClick然后从id集合中获取id一样简单。

当然,您必须确保在删除列表视图的行时删除此集合的值。


尝试以下方法:

private DBHelper helper;
private SQLiteDatabase db;
private ArrayList<String> result = new ArrayList<String>();
private ArrayList<Long> idList = new ArrayList<Long>();
private ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    helper = new DBHelper(this);
    db = helper.getWritableDatabase();      

    String query = "select * from " + helper.TABLE_PEKERJA;
    Cursor c = db.rawQuery(query, null);
    int getIdIndex = c.getColumnIndex(helper.COL_ID);
    int getNamaIndex = c.getColumnIndex(helper.COL_NAMA);

    while (c.moveToNext()) {
        idList.add(c.getLong(getIdIndex));
        result.add(c.getString(getNamaIndex));
    }

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, result);
    this.setListAdapter(adapter);
    getListView().setTextFilterEnabled(true);
}

public boolean deleteData(Long id) {
    return db.delete(TABLE_PEKERJA, COL_ID + " = " + id, null) > 0;
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Long idValue = idList.get(position);
    boolean isDeleted = deleteData(idValue);
    Toast.makeText(this, "boolean value for database deletion: " + String.valueOf(isDeleted), Toast.LENGTH_SHORT).show();

    idList.remove(position);
    result.remove(position);
    adapter.notifyDataSetChanged(); //refresh so that we can see listview changes
}