#android #firebase-realtime-database #android-recyclerview
#Android #firebase-база данных в реальном времени #android-recyclerview
Вопрос:
все! Я хочу удалить значение из базы данных Firebase с помощью RecyclerView. Однако я не могу найти ключ дочернего элемента, который я хочу удалить.
Во-первых, я добавляю данные в базу данных следующим образом:
String key = MainActivity.databaseReference.push().getKey();
MainActivity.databaseReference.child(key).setValue(myAppModel);
Что касается удаления, в моем адаптере RecyclerView я записал OnClickListener в ImageView и успешно удалил элемент из списка!
Кроме того, я перепробовал множество способов удаления этого элемента из базы данных, но данные по-прежнему нетронуты.
Вот код:
holder.appDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAppModelList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, mAppModelList.size());
final ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
dataSnapshot.getValue(AppModel.class);
MainActivity.databaseReference.child(mAuth.getUid()).child(dataSnapshot.getRef().getKey()).removeValue();
System.out.println(dataSnapshot.getRef().getKey()); // it gives me user id...but in my MainActivity it gives the real key
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
MainActivity.databaseReference.addListenerForSingleValueEvent(eventListener);
}
});
Как я упоминал в комментарии к коду, GetRef().getKey() выдает мне идентификатор пользователя Firebase, например MAuth.getUid()
И в MainActivity я получаю реальное имя (ключ) дочернего элемента
Query query = databaseReference;
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
AppModel appModel = dataSnapshot.getValue(AppModel.class);
appModelResult.add(0, appModel);
AddAppDialog.setAppModelResult(appModelResult);
System.out.println(dataSnapshot.getRef().getKey());
reloadFragment(fragment);
}
Что я должен сделать, чтобы удалить данные из базы данных?
Заранее всем спасибо!
Ответ №1:
Решена! Изначально, когда я хочу удалить элемент, я написал
MainActivity.databaseReference.child(mAuth.getUid()).child(appModel.getAppId()).removeValue();
Однако, как я заметил, вам не следует указывать идентификатор пользователя
MainActivity.databaseReference.child(appModel.getAppId()).removeValue();
И вот мы здесь!
Надеюсь, это может помочь всем