Как неявно обновить узлы в Android firebase - PullRequest
1 голос
/ 05 апреля 2020

Structure of my database

В моем приложении пользователи могут создавать сообщения и обновлять их изображения профиля, но когда они это делают, изображение их созданных сообщений не изменяется. Я думал, что решил это с помощью следующего кода, но это не так.

Кто-нибудь знает, как это исправить?

В BD у меня есть следующая структура, как видно на рисунке, и в Для каждого идентификатора поста сохраняются данные идентификатора пользователя. Я хочу, чтобы независимо от идентификатора поста во всех дочерних узлах, где узел userId был одинаковым. Для текущего пользователя обновлен узел userPhoto, я думал, что с изображением кода было бы достаточно, но он создает новый дочерний узел сообщений, но это не то, что я ищу, как я могу решить, что они думают.

final DatabaseReference sd = FirebaseDatabase.getInstance().getReference("Posts");
Query query = sd.orderByChild("userPhoto").equalTo(currentUsers.getPhotoUrl().toString());
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        HashMap<String, Object> maps = new HashMap<>();
        maps.put("userPhoto", ""+mUri);
        sd.updateChildren(maps);

    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

1 Ответ

1 голос
/ 05 апреля 2020

Если вы хотите обновить userPhoto под идентификатором, то вы можете сделать следующее:

final DatabaseReference sd = FirebaseDatabase.getInstance().getReference("Posts");

Query query = sd.orderByChild("userPhoto").equalTo(currentUsers.getPhotoUrl().toString());
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
     for(DataSnapshot ds : dataSnapshot.getChildren()){
        String key = ds.getKey();
        HashMap<String, Object> maps = new HashMap<>();
        maps.put("userPhoto", ""+mUri);
        sd.child(key).updateChildren(maps);
      }
   }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

Поскольку вы выполняете запрос, все, что вам нужно сделать, это выполнить итерацию, а затем вы получит правильный случайный идентификатор, а затем использует его в пути child(key)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...