Я работаю над добавлением функции редактирования и удаления в мое приложение.Функция редактирования работает нормально, но моя функция удаления не всегда удаляет правильное значение.
Сценарии, когда функция удаления работает не так, как задумано:
Когда я добавляюновый узел данных (новый поставщик в случае моего приложения.)
Когда я редактирую значение, последнее отредактированное значение удаляется вместо выбранного.
При запуске приложения удаление только одного из элементов приводит к удалению всего «ПОСТАВЩИКА».
При необходимости дважды нажать кнопку удаления, чтобы удалить элемент.
Это структура моей базы данных:
ПОСТАВЩИКИ >>>
=============> автоматически генерируемый ключ (например, -LpmoJ8DjCvF23I2ymVg)
==============================================================> Имя_поставщика
=======================================================> Адрес_поставщика
=============================================================> Supplier_PhoneNum
=======================================================> Supplier_Email
Вот моя функция удаления, это onClickListener и использует AlertDialog для подтверждения:
btnMenuDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder builder = new AlertDialog.Builder(SupplierMaintenance.this);
builder.setTitle("DELETE Supplier");
builder.setMessage("You are about to delete the selected supplier. Continue?");
builder.setCancelable(false);
builder.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//DELETE METHOD
databaseSupp = FirebaseDatabase.getInstance().getReference("SUPPLIERS");
final DatabaseReference mDatabase2 = databaseSupp;
mDatabase2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot2) {
for (final DataSnapshot snapshot : dataSnapshot2.getChildren()) {
if (snapshot.child("Supplier_Name").getValue(String.class).equals(suppName.getText().toString())) {
deletekey = snapshot.getKey().toString();
keyholder.setText(deletekey);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
mDatabase2.child(keyholder.getText().toString()).removeValue();
}
});
builder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
//DELETE METHOD END
}
});
Чтобы удалить значение, я получаю элемент автоматическисгенерированный ключ, и используйте его как ссылку для удаления всего узла этого ключа.Это прекрасно работает в моей функции редактирования, но не в моей функции удаления.
Я думаю, что это должно что-то делать с onDataChange, но я не уверен.
Примечание : Элементы находятся в recyclerView , и пользователю разрешено редактировать или удалять их, если они захотят в любое время.
Я попытался переместить метод onDatachange, переместив removeValue() работает в разных местах и устанавливает ключ в TextView перед его использованием, чтобы убедиться, что это правильный ключ, какой он есть, но по какой-то причине он не работает должным образом, удаляя другие элементы, которые не были выбраны.
Я застрял в этой проблеме на 3 дня, так как я новичок в этом виде программирования, и это мое первое полнофункциональное приложение.
Если вам нужен больше код, я могу выложить столько, сколько нужно.
Любая помощь очень ценится:).