Wenn es nur ein einzelnes Element gibt, das den Bedingungen entspricht, würde ich empfehlen, den Schlüssel dieses Elements irgendwo zu behalten. Das Nachschlagen des gleichen Artikels ist sowohl teurer als nötig und wird wahrscheinlich irgendwann zu einem Problem werden.
Aber im aktuellen Anforderungen, sollte diese Arbeit:
private void deleteProductVariant(String pid, String vid, String mrp, String sp){
final String uid = getUid();
DatabaseReference listRef = databaseReference.child("shops-product-list").child(uid).child("product-list");
listRef. addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot variantSnapshot: snapshot.getChildren()) {
ShopProductVariant variant = variantSnapshot.getValue(ShopProductVariant.class);
if (variant.pid == pid && variant.vid == void) {
variantSnapshot.getRef().removeValue();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
})
}
Sie werden bemerken, dass dieser Code die gesamte Produktliste ein Benutzer das Element zu finden lädt zu löschen. Der Grund dafür ist, dass Sie zwei Werte überprüfen müssen (pid
und vid
), während Firebase-Abfragen nur mit einer einzigen Bedingung überprüfen können. Wenn es sich um ein Leistungsproblem handelt, können Sie eine Hilfseigenschaft hinzufügen, die die beiden Werte kombiniert (siehe Query based on multiple where clauses in firebase).
Da Sie sagen, dass die Kombination von pid
und vid
für Ihre Anwendung einzigartig ist, könnten Sie sogar erwägen, von den als Schlüssel Ihrer Produkte verwenden stattdessen eine Push-ID verwenden:
String key = pid + "_" + vid;
dann Löschen wird so einfach wie:
private void deleteProductVariant(String pid, String vid, String mrp, String sp){
final String uid = getUid();
DatabaseReference listRef = databaseReference.child("shops-product-list").child(uid).child("product-list");
DatabaseReference itemRef = listRef.child(pid + "_" + vid);
itemRef.removeValue();
}
Wenn Sie den 'Schlüssel' des zu löschenden Elements nicht kennen, wie identifizieren Sie, welche der untergeordneten Elemente gelöscht werden sollen? Oder möchten Sie alle untergeordneten Elemente mit demselben 'pid' löschen? –
@FrankvanPuffelen, ich möchte nur einzelne Artikel mit der gleichen PID und VID Pass als Funktion Args löschen. –