Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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
Android dataSnapShot.getValue()在数据库中存在数据时返回null event_Android_Firebase Realtime Database_Android Recyclerview_Android Adapter - Fatal编程技术网

Android dataSnapShot.getValue()在数据库中存在数据时返回null event

Android dataSnapShot.getValue()在数据库中存在数据时返回null event,android,firebase-realtime-database,android-recyclerview,android-adapter,Android,Firebase Realtime Database,Android Recyclerview,Android Adapter,我使用Firebase作为后端系统,还使用Recycler视图向用户显示数据。但是当从数据库获取数据时,getValue()方法返回null。 我已在下面附上我的代码: public class Post { private String desc; private String image; public Post() {} public Post(String desc,String image) { this.image

我使用Firebase作为后端系统,还使用Recycler视图向用户显示数据。但是当从数据库获取数据时,
getValue()
方法返回
null
。 我已在下面附上我的代码:

public class Post {
    private String desc;
    private String image;

    public  Post()
    {}

    public Post(String desc,String image)
    {
        this.image= image;
        this.desc = desc;
    }

    public String getDescription()
    {
        return desc;
    }

    public String getImage(){
        return image;
    }
}
MainActivity的代码:

public class fragment2Activity extends Fragment {

    private RecyclerView recyclerView;
    private RecyclerView.Adapter madapter;
    private RecyclerView.LayoutManager layoutManager;
    private View view;
    private ArrayList<Post> postArrayList;

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.fragment2, container, false);
        final DatabaseReference mref= FirebaseDatabase.getInstance().getReference().child("Post");

        recyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);

        recyclerView.setHasFixedSize(true);

        layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);


        mref.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    for (DataSnapshot childSnapShot : dataSnapshot.getChildren()) {
                        Post p = childSnapShot.getValue(Post.class);

                        postArrayList.add(p);
                    }
                    madapter = new MyAdapter(postArrayList);
                    recyclerView.setAdapter(madapter);
                }

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

            }
        });

        return  view;
    }
}
公共类fragment2Activity扩展了片段{
私人回收站;
专用回收器查看适配器madapter;
private RecyclerView.LayoutManager LayoutManager;
私人视野;
私人ArrayList postArrayList;
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment2,容器,假);
final DatabaseReference mref=FirebaseDatabase.getInstance().getReference().child(“Post”);
recyclerView=(recyclerView)view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
layoutManager=新的LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
mref.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
对于(DataSnapshot childSnapShot:DataSnapshot.getChildren()){
Post p=childSnapShot.getValue(Post.class);
后列表添加(p);
}
madapter=新的MyAdapter(postArrayList);
recyclerView.setAdapter(madapter);
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
返回视图;
}
}
我的数据库:

日志:


有人能找到解决方案吗?

您从未初始化
postArrayList
,因此
postArrayList.add(p)正在导致
NullPointerException

解决方案是创建
postArrayList
,通常在
onCreate
中:

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    view = inflater.inflate(R.layout.fragment2, container, false);
    final DatabaseReference mref= FirebaseDatabase.getInstance().getReference().child("Post");

    recyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);

    recyclerView.setHasFixedSize(true);

    layoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(layoutManager);

    postArrayList = new ArrayList<Post>(); // <-- this is new

    mref.addListenerForSingleValueEvent(new ValueEventListener() {
public View onCreateView(@NonNull LayoutInflater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment2,容器,假);
final DatabaseReference mref=FirebaseDatabase.getInstance().getReference().child(“Post”);
recyclerView=(recyclerView)view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
layoutManager=新的LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
postArrayList=新ArrayList()//