我可以请求帮助......我设法将数据添加到数据库..但我有问题删除数据...因为我无法根据我的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()...... ??
谢谢~~希望大家都明白我的问题.. ^ _ ^
答案 0 :(得分:0)
传统方式是你只需从列表点击参数中获取id
。
protected void onListItemClick(ListView l, View v, int position, long id) <------
但是您无法立即执行此操作,因为ListView
与ArrayAdapter
而不是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
}