Java 如何在加载应用程序时在ListView上显示从Firebase实时数据库检索的内容

Java 如何在加载应用程序时在ListView上显示从Firebase实时数据库检索的内容,java,android,firebase,Java,Android,Firebase,我试图在应用程序加载时在ListView中将保存在Firebase数据库中的记录显示给用户,但它不起作用。 问题在于,当应用程序首次加载时,内容不会添加到ListView 在测试应用程序时,我注意到,当我第一次打开应用程序时,内容不会显示,但只有在按下“后退”按钮关闭应用程序,然后重新打开应用程序时,内容才会显示 我添加了这个方法:adapter.notifyDataSetChanged();按照某些人的建议启动onStart(),但它没有起作用 这是获取数据的方法: private void

我试图在应用程序加载时在ListView中将保存在Firebase数据库中的记录显示给用户,但它不起作用。 问题在于,当应用程序首次加载时,内容不会添加到ListView

在测试应用程序时,我注意到,当我第一次打开应用程序时,内容不会显示,但只有在按下“后退”按钮关闭应用程序,然后重新打开应用程序时,内容才会显示

我添加了这个方法:adapter.notifyDataSetChanged();按照某些人的建议启动onStart(),但它没有起作用

这是获取数据的方法:

 private void fetchData() {

    if (FirebaseDatabase.getInstance() != null) {
        FirebaseDatabase.getInstance().goOffline();
    }

        FirebaseDatabase.getInstance().goOnline();

        Query query = FirebaseDatabase.getInstance().getReference().child("User");
        FirebaseRecyclerOptions<User> options =
                new FirebaseRecyclerOptions.Builder<User>()
                        .setQuery(query, new SnapshotParser<User>() {
                            @NonNull
                            @Override
                            public User parseSnapshot(@NonNull DataSnapshot snapshot) {

                                s = snapshot.getChildrenCount();
                                Toast.makeText(getApplicationContext(), Long.toString(s), Toast.LENGTH_SHORT).show();

                                return new User(snapshot.child("fullName").getValue().toString(),
                                        snapshot.child("userId").getValue().toString());

                            }
                        })
                        .build();

        adapter = new FirebaseRecyclerAdapter<User, MyViewHolder>(options) {

            @Override
            public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.database_contents, parent, false);

                return new MyViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i,
                                            @NonNull User user) {
                myViewHolder.setTxtFullName(user.getFullName());
                myViewHolder.setTxtUserId(user.getUserId());

                myViewHolder.root.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(getApplicationContext(), String.valueOf(i), Toast.LENGTH_SHORT).show();
                    }
                });

            }

        };

}
我还尝试在onCreate中调用fetchData()方法


我会喜欢的内容显示在ListView作为应用程序的第一次加载。提前感谢

下面是在listview中获取firebase数据的简单方法

final DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference().child("Contacts");
mDatabase.child(user_id).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshott) {
            list = new ArrayList<>();
            for (DataSnapshot ds : dataSnapshott.getChildren()){
                final String key_idd = ds.getKey();
                Listdata listdata = new Listdata();
                String name=ds.child("name").getValue(String.class);
                listdata.setName(name);
                listdata.setKey_id(key_idd);
                list.add(listdata);
            }

            recycler = new RecyclerviewAdapter(MyContactActivity.this, list);
            recyclerview.setAdapter(recycler);
        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.e("Error", "Failed to read user", error.toException());
        }
    });
final DatabaseReference mDatabase=FirebaseDatabase.getInstance().getReference().child(“联系人”);
mDatabase.child(用户id).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot dataSnapshott){
列表=新的ArrayList();
对于(DataSnapshot ds:dataSnapshott.getChildren()){
最后一个字符串key_idd=ds.getKey();
Listdata Listdata=新Listdata();
String name=ds.child(“name”).getValue(String.class);
listdata.setName(name);
setKey_id(key_id);
list.add(listdata);
}
recycler=新的RecycleServiceAdapter(MyContactActivity.this,list);
recyclerview.setAdapter(回收器);
}
@凌驾
已取消的公共无效(DatabaseError错误){
//无法读取值
Log.e(“错误”,“读取用户失败”,Error.toException());
}
});

Firebase使用侦听器读取数据,以便在第二次打开时看到结果。您应该使用接口读取数据。

请检查,这是一个工作示例。好的,请您解释一下这行代码的全部内容:Listdata Listdata=new Listdata();它是一种模型类,我们可以从中设置和获取对象。公共类Listdata{public String key_id;public String name;public Listdata(){this.key_id=key_id;this.name=name;}public String getName(){return name;}public void setName(String name){this.name=name;}public String getKey_id(){return key_id;}public void setKey_id(String key_id){this.key_id=key_id;}
final DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference().child("Contacts");
mDatabase.child(user_id).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshott) {
            list = new ArrayList<>();
            for (DataSnapshot ds : dataSnapshott.getChildren()){
                final String key_idd = ds.getKey();
                Listdata listdata = new Listdata();
                String name=ds.child("name").getValue(String.class);
                listdata.setName(name);
                listdata.setKey_id(key_idd);
                list.add(listdata);
            }

            recycler = new RecyclerviewAdapter(MyContactActivity.this, list);
            recyclerview.setAdapter(recycler);
        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.e("Error", "Failed to read user", error.toException());
        }
    });