Попытка извлечь данные из firebase, но данные не отображаются

#android #firebase #firebase-realtime-database

#Android #firebase #firebase-база данных в реальном времени

Вопрос:

У меня есть два текстовых представления в моем макете, и я пытался извлечь данные из базы данных firebase и установить для них значение TextViews (если это имеет смысл), но при попытке их извлечения ничего не отображается. Вот мой код, а также моя структура Json в firebase. Может кто-нибудь, пожалуйста, помогите мне.

Структура Json :

   "Clicks_and_Views" : {
    "-MHXh3N9b7tXkATD2Zyg" : {
      "clicks" : 1,
      "views" : 6
    }
  },
  

Код

 final DatabaseReference databaseReference2 = FirebaseDatabase.getInstance("https://poopy0-45091.firebaseio.com").getReference("Clicks_and_Views").child(getid);

databaseReference2.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
            for(DataSnapshot ds: snapshot.getChildren()){
              Long one = ds.child("clicks").getValue(Long.class);
              Long two = ds.child("views").getValue(Long.class);

                txt1.setText((int) one.longValue());
                txt2.setText((int) two.longValue());
        }
  

Ответ №1:

databaseReference2 Точки вплоть до отдельного элемента в JSON: /Clicks_and_Views/$id . Таким образом, когда вы загружаете это, вы получаете моментальный снимок с отдельными свойствами ( clicks и views ) этого отдельного элемента.

По этой причине вам не нужно повторять цикл snapshot.getChildren() в вашем onDataChange методе:

 final DatabaseReference databaseReference2 = FirebaseDatabase.getInstance("https://poopy0-45091.firebaseio.com").getReference("Clicks_and_Views").child(getid);
databaseReference2.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        Long one = snapshot.child("clicks").getValue(Long.class);
        Long two = snapshot.child("views").getValue(Long.class);
        ....
    }
  

вам нужно только перебирать дочерние узлы, если в результатах есть / может быть несколько дочерних узлов, например: если вы прочитали все Clicks_and_Views или выполнили запрос к нему.