Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Firebase获得孩子?_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何从Firebase获得孩子?

Java 如何从Firebase获得孩子?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我想从Posts->Firebase的所有“id”中获取数据,也就是说,这行就是我要获取的。我的代码只从最后一个id获取最后一个日期 如果当前日期和日期与从Firebase收到的日期匹配,则程序将删除id package com.aak.dayworkkz.Activities.ui.slideshow; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import

我想从Posts->Firebase的所有“id”中获取数据,也就是说,这行就是我要获取的。我的代码只从最后一个id获取最后一个日期

如果当前日期和日期与从Firebase收到的日期匹配,则程序将删除id

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;
    }
}

代码中的问题在于每次迭代都在
文本视图上设置日期,这是不正确的。因此,您只能看到最后一个结果,因为在循环结束时,最后一项被设置为
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) {}
});
DatabaseReference database=FirebaseDatabase.getInstance().getReference().child(“Posts”);
database.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
列表日期=新建ArrayList();
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
String date=dataSnapshot1.child(“日期”).getValue(String.class);
日期。添加(日期);
}
Log.d(标记,dates.toString());
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){}
});

获得列表后,将其传递给适配器并显示所需的元素。

创建模型类hold value of retrieve child values并使用list进行hold

数据类:

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) {}
});
database.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
列表=新的ArrayList();
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
MyData值=dataSnapshot1.getValue(MyData.class);
列表。添加(值);
}
//您可以使用列表在此处显示
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){}
});

大家好,欢迎来到Stackoverflow,不清楚您想得到什么?你能解释一下更多的plz.Posts->child(id:M-JujJDa-9liAtqG49g)->child(日期:27фццП.2020)我想从每个id中获取child(日期)吗