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