У меня есть напоминание о задаче, которое позволяет хранить информацию в базе данных, а затем редактировать или извлекать их позже (например, блокнот). Всякий раз, начиная с приложения, а затем переходит к активности, он отображает сохраненные элементы, но при сбое, если вы попытаетесь выбрать и удалить его. Вы даже можете щелкнуть по нему, чтобы просмотреть его, просто не удалите. Если вы сначала добавите другой элемент, вы можете удалить все и все из них. Если я переключусь на другое приложение и вернусь к нему, все в порядке. Только если приложение полностью отключится, прежде чем возвращаться, чтобы удалить, это вызывает проблему.Не удается удалить элемент базы данных после первой загрузки страницы
Я совершенно в тупике.
Вот начало, которое отображает элементы
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mDbHelper = new RemindersDbAdapter(this);
mDbHelper.open();
fillData();
setContentView(R.layout.meds);
registerForContextMenu(getListView());
}
private void fillData() {
Cursor remindersCursor = mDbHelper.fetchAllReminders();
startManagingCursor(remindersCursor);
String[] from = new String[] { RemindersDbAdapter.KEY_TITLE };
int[] to = new int[] { R.id.text1 };
SimpleCursorAdapter reminders = new SimpleCursorAdapter(this,
R.layout.reminder_row, remindersCursor, from, to);
setListAdapter(reminders);
}
и контекстное меню для удаления
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.list_menu_item_longpress, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getItemId() == R.id.menu_delete) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
long mRowId = info.id;
cancelReminder();
mDbHelper.deleteReminder(info.id);
fillData();
return true;
}
return super.onContextItemSelected(item);
}
Я не думаю, что в базе данных, потому что, если приложение будет удалить только штраф уже хранит что-то еще.
EDIT Я пытался отладить эту проблему и нашел место ошибки в методе cancelReminder
public void cancelReminder() {
alarmid = Integer.parseInt(malarmid);
Log.e(TAG2, "meds screen alarmid " + alarmid);
Intent i = new Intent(ReminderManager.mContext, OnAlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(ReminderManager.mContext,
alarmid, i, PendingIntent.FLAG_UPDATE_CURRENT);
ReminderManager.mAlarmManager.cancel(pi);
}
Ошибка в намерениях по какой-то причине. Здесь я удаляю будильник для напоминания. Он первоначально установлен в другой деятельности, и вот где я его удаляю. Что действительно запутывает, если приложение работает, и я сохраняю другое напоминание, которое я могу удалить. Если я запустил приложение и перейду к напоминанию, чтобы удалить его, он сработает.