我有一个 SQLite 数据库,我将用户选择的数据保存到其中。此数据将在列表视图中可见,如果您长按数据,它将删除该项目。当我看到该项目从列表视图中消失时,这是有效的,但是当我重新启动应用程序并且所有列表视图项目都从数据库中恢复时,被删除的所有内容都会回来。我正在使用这个语句:
public void deleteAlarmEntry(int pos){
Log.i("Deleting item from pos: ", String.valueOf(pos));
db.delete(MySQLHelper.TABLE_NAME, MySQLHelper.ID_COL + "='" + pos + "'", null);
}
我可以在日志中看到正在调用的语句。有没有更好的方法来确保语句正确执行?这里有什么问题吗?
这是我在长按列表视图项时在 MainActivity 中调用的 removeItem 方法:
public void removeItem(int position) {
alarmItemArray.remove(position);
dataSource.deleteAlarmEntry(position);
alarmAdapter.notifyDataSetChanged();
}
dataSource.deleteAlarmEntry() 调用上述数据库删除。
此外,在应用程序启动时,我将条目带入临时数组列表,然后解析时间以获取适配器数组列表,如下所示:
dataSource = new WeatherDataSource(this);
dataSource.open();
ArrayList<AlarmEntry> alarmEntries = (ArrayList<AlarmEntry>) dataSource.getAllWeatherEntries();
alarmItemArray = getTimeFromEntries(alarmEntries);
alarmAdapter = new ArrayAdapter<String>(this,
R.layout.activity_alarm_item, R.id.time, alarmItemArray);
lv = (MyListView) findViewById(R.id.listview);
lv.setAdapter(alarmAdapter);
这是数据库的 getAllWeatherEntries:
public List<AlarmEntry> getAllWeatherEntries(){
List<AlarmEntry> weatherEntry = new ArrayList<AlarmEntry>();
Cursor cursor = db.query(MySQLHelper.TABLE_NAME, cols, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
AlarmEntry m = cursorToEntry(cursor);
weatherEntry.add(m);
Log.i("Get all weather entries", m.getTime());
cursor.moveToNext();
}
cursor.close();
return weatherEntry;
}