1

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

此类名称为 ViewActivity.java,我在其中显示我的数据库内容...我只在我的 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 2)的 ListView 中的项目时,有 db.open()...但是我应该在哪里关闭数据库购买 db.close() 。 ..??

谢谢~~希望大家能理解我的问题。。^_^

4

1 回答 1

0

常规完成的方式是您只需id从列表单击参数中获取。

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

但是您不能立即执行此操作,因为您ListView连接到的是 anArrayAdapter而不是 a 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
}  
于 2013-02-08T20:24:14.397 回答