Как получить ребенка от Firebase? - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу получить данные из всех «id» из Posts -> Firebase, а именно, строка только что, у меня есть один, чтобы получить. Мой код получает только последнюю дату из последнего идентификатора.

Программа работает следующим образом, если текущая дата и дата совпадают с датой, полученной из Firebase, она удаляет идентификатор.

package com.aak.dayworkkz.Activities.ui.slideshow;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders;

import com.aak.dayworkkz.Models.Post;
import com.aak.dayworkkz.R;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;


public class SlideshowFragment extends Fragment {

    private SlideshowViewModel slideshowViewModel;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        slideshowViewModel =
                ViewModelProviders.of(this).get(SlideshowViewModel.class);
        final View root = inflater.inflate(R.layout.fragment_slideshow, container, false);

        **final DatabaseReference database = FirebaseDatabase.getInstance().getReference().child("Posts");
        database.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                        String date = dataSnapshot1.child("date").getValue().toString();
                        TextView textView = root.findViewById(R.id.dateText);
                        textView.setText(date + " its work");
                    }
            }

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

            }
        });**
        return root;
    }
}

enter image description here

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Проблема в вашем коде заключается в том, что вы устанавливаете дату на TextView на каждой итерации, что неверно. Таким образом, вы видите только последний результат, потому что в конце l oop последний элемент установлен на TextView. Так как под вашим Posts узлом у вас есть несколько дочерних элементов, вы должны использовать вместо TextView a ListView или, что еще лучше, RecyclerView, где вы можете добавить несколько элементов. Для этого создайте список, как показано в следующих строках кода:

DatabaseReference database = FirebaseDatabase.getInstance().getReference().child("Posts");
database.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        List<String> dates = new ArrayList<>();
        for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
            String date = dataSnapshot1.child("date").getValue(String.class);
            dates.add(date);
        }
        Log.d(TAG, dates.toString());
    }

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

Получив список, передайте его адаптеру и отобразите нужные элементы.

0 голосов
/ 06 февраля 2020

Создайте удерживаемое значение класса модели для извлечения дочерних значений и используйте список для их удержания.

Класс данных:

public class MyData {

    String city ;
    String date ;
    String phone ;
    String picture ;
    String postKey ;
    String price ;
    String userId ;
    String userPhoto ;
    long timeStamp ;

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getPicture() {
        return picture;
    }

    public void setPicture(String picture) {
        this.picture = picture;
    }

    public String getPostKey() {
        return postKey;
    }

    public void setPostKey(String postKey) {
        this.postKey = postKey;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserPhoto() {
        return userPhoto;
    }

    public void setUserPhoto(String userPhoto) {
        this.userPhoto = userPhoto;
    }

    public long getTimeStamp() {
        return timeStamp;
    }

    public void setTimeStamp(long timeStamp) {
        this.timeStamp = timeStamp;
    }
}

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

database.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        List<MyData> list = new ArrayList<>();
        for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
            MyData value = dataSnapshot1.getValue(MyData.class);
            list.add(value);
        }
        // you can use list for display here
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...