我有一个由 sqlite db 提供的列表视图。我在几个不同的点调用 fillData() 来更新列表视图。
private void fillData() {
readDatabase.open();
Cursor itemsCursor = readDatabase.fetchAllItems();
startManagingCursor(itemsCursor);
String[] from = new String[] { DatabaseHandler.KEY_ITEM,
DatabaseHandler.KEY_UNITCOST, DatabaseHandler.KEY_QUANTITY,
DatabaseHandler.KEY_TOTAL };
int[] to = new int[] { R.id.itemtext, R.id.costtext, R.id.quantitytext,
R.id.totaltext };
SimpleCursorAdapter items = new SimpleCursorAdapter(this,
R.layout.rowincart, itemsCursor, from, to);
setListAdapter(items);
}
类的全部代码在这里添加
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.cartactivity);
readDatabase = new DatabaseHandler(this);
// readDatabase.open();
loadwidget();
fillData();
ListView lv = getListView();
this.registerForContextMenu(lv);
}
private void loadwidget() {
Bundle extras = getIntent().getExtras();
cost = extras.getInt("Cost");
quantity = extras.getInt("quantity");
product = extras.getString("product");
Log.i("Hello Testing", cost + " and " + quantity + " " + product);
}
@SuppressWarnings("deprecation")
private void fillData() {
readDatabase.open();
itemsCursor = readDatabase.fetchAllItems();
startManagingCursor(itemsCursor);
String[] from = new String[] { DatabaseHandler.KEY_ITEM,
DatabaseHandler.KEY_UNITCOST, DatabaseHandler.KEY_QUANTITY,
DatabaseHandler.KEY_TOTAL };
int[] to = new int[] { R.id.itemtext, R.id.costtext, R.id.quantitytext,
R.id.totaltext };
SimpleCursorAdapter items = new SimpleCursorAdapter(this,
R.layout.rowincart, itemsCursor, from, to);
setListAdapter(items);
}
@Override
protected void onDestroy() {
super.onDestroy();
itemsCursor.close();
readDatabase.close();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("SMARTAWAY");
menu.add(0, DELETE_ID, 1, "Delete Item");
menu.add(0, UPDATE_ID, 1, "Change Quantity");
}
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case DELETE_ID:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
readDatabase.deleteItem(info.id);
fillData();
return true;
case UPDATE_ID:
final AdapterContextMenuInfo info1 = (AdapterContextMenuInfo) item
.getMenuInfo();
final Dialog dialog = new Dialog(Cartactivity.this);
dialog.setContentView(R.layout.dialog);
final EditText edit0 = (EditText) dialog
.findViewById(R.id.quantity);
edit0.setText(String.valueOf(Quantity));
Button ok = (Button) dialog.findViewById(R.id.ok);
dialog.setTitle(" Add More Items ");
dialog.setCancelable(true);
Button inc = (Button) dialog.findViewById(R.id.inc);
inc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int c = Integer.parseInt(Quantity);
c = c + 1;
Quantity = String.valueOf(c);
edit0.setText(Quantity);
}
});
Button dec = (Button) dialog.findViewById(R.id.dec);
dec.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int c = Integer.parseInt(Quantity);
c = c - 1;
Quantity = String.valueOf(c);
edit0.setText(Quantity);
}
});
ok.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
row1 = info1.id;
flag = 1;
int b = Integer.parseInt(Quantity);
int total = cost * b;
_total = String.valueOf(total);
_cost = String.valueOf(cost);
_quantity = String.valueOf(b);
_item = product;
Log.i(row1+" id"+_total +" total"+ _cost +" cost"+ _quantity+" quant", "Hello updated database");
readDatabase.updateItem(row1, _item, _cost, _quantity, _total);
fillData();
dialog.dismiss();
}
});
Button cancel = (Button) dialog.findViewById(R.id.cancel);
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialog.show();
return true;
}
return super.onContextItemSelected(item);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long thisID) {
super.onListItemClick(l, v, position, thisID);
l.showContextMenuForChild(v);
Cursor cursor = (Cursor) getListAdapter().getItem(position);
Quantity = cursor.getString(cursor
.getColumnIndex(DatabaseHandler.KEY_QUANTITY));
/*Total = cursor.getString(cursor
.getColumnIndex(DatabaseHandler.KEY_TOTAL));*/
}
这里一切都很好,但是我在 Logcat 中发现了一些错误,即 close() 没有在数据库上显式调用,就像这样。该错误不会停止我在任何地方的工作,但问题看起来很奇怪。我想我必须关闭光标,但不确定。我已经在 Destroy 上关闭了数据库,但不确定游标。请帮忙。
这里提到了同样的问题,但没有得到实际的解决方案
提前致谢