#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
или выполнили запрос к нему.