Установка значений для нескольких дочерних узлов Firebase - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь установить значения для нескольких дочерних узлов в Firebase, но когда я пытаюсь сделать это, студия Android выделяет второго дочернего элемента как ошибку.Есть ли способ сделать это без использования hashmap?

mDatabaseLike.child("ProjectName").setValue(uploadCurrent.getName()).child("Votes/").setValue(mCountLikes);

Я хочу, чтобы моя база данных была сохранена как:

CountLikes:{
      ProjectName: "abcd"
      Votes: "78"
}

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Ответ Дуга отлично подходит, когда вы хотите заполнить узел данными из класса POJO, в данном случае вашими ProjectName и Votes, но, как говорится в комментарии Фрэнка, если у вас были старые данные на этом узле до размещения нового, он будет перезаписан / удален с этого узла.

Например, если у вас это было на вашем узле

CountLikes:{
      ProjectName: "MyAwesomeProject"
      Votes: "100"
      comments: 20  --> New data that you could add or have
      flags: 0 --> New data that you could add or have
      favorites: 30 --> New data that you could add or have
}

до выполнения этого

YourObject o = new YourObject();
o.ProjectName = "abcd";
o.Votes = 78;
mDatabaseLike.setValue(o);

Все этостарые данные, которые у вас были на этом узле, будут заменены на

CountLikes:{
      ProjectName: "abcd"
      Votes: "78"
}

Если вам нужно только обновить / изменить данные на этом конкретном узле, я бы предложил сделать это с HashMap, потому что этопросто обновите значения внутри этого узла и не создавайте их заново и замените / удалите их, если у вас там уже были данные.

Продолжение ответа Дуга

    class YourObject {
        public String ProjectName;
        public int Votes;
    }

 String projectName = "abcd";
 int votes = 78;
 Map<String,Object> mapData = new HashMap<>();
 mapData.put("ProjectName",projectName);
 mapData.put("Votes",votes);
 mDatabaseLike.updateChildren(mapData).addOnCompleteListener(new OnCompleteListener<Void>(){
            @Override
            public void onComplete(@NonNull Task<Void> task){
                //Data pushed succefully, update UI or do something else.
            }
        });

Это предотвратит воссоздание всего объекта.и просто заменив эти данные внутри вашего узла, я знаю, что вы запросили без HashMap, но я просто опубликую, почему это хороший выбор, если делать это таким образом.

0 голосов
/ 28 января 2019

Ваша единственная альтернатива использованию карты - использование объекта Java, члены которого имеют значения, которые вы хотите добавить.Это будет примерно так:

class YourObject {
    public String ProjectName;
    public int Votes;
}

YourObject o = new YourObject();
o.ProjectName = "abcd";
o.Votes = 78;
mDatabaseLike.setValue(o);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...