gpt4 book ai didi

java - android 列表在第一次运行时在 recyclerview 中获得 0 值

转载 作者:行者123 更新时间:2023-11-30 05:09:14 24 4
gpt4 key购买 nike

大家好,我的问题是,当我第一次运行我的应用程序时,我的适配器列表值变为 0。然后,当我单击后退按钮并再次返回到我的应用程序时,它工作正常。我正在尝试显示来自 firebase 的数据。感谢您的帮助。

这是我的用户助手类

public class UserHelper {
private FirebaseDatabase firebaseDatabase;
private DatabaseReference databaseReference;
private Context context;
private String success = "Add Success.";
private String error = "Something went wrong.";
private String message;
public UserHelper(Context context) {
this.context = context;
initFireBase();
}

private void initFireBase(){
FirebaseApp.initializeApp(context);
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference();
}


public List<User> getData(){
final List<User> list = new ArrayList<>();
databaseReference.child("User_table").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (list.size()>0)
list.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
User user = snapshot.getValue(User.class);
list.add(user);
}
}

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

}
});
return list;
}

然后这是我的mainactivity显示代码

@Override
public void displayData(List<User> list) {
Adapter adapter= new Adapter(list, new Adapter.OnItemClickListener() {
@Override
public void onClickItem(User user) {
presenter.clickItem(user);
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}

最佳答案

ValueEventListener 是一个异步调用。您需要在 onDataChange 中调用 notifyDataSetChanged()。问题是您的 getData() 返回空白列表,稍后会调用回调。改变你的方法如下:

 public void getData(){
databaseReference.child("User_table").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
final List<User> list = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
User user = snapshot.getValue(User.class);
list.add(user);
}
displayData(list);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
// Handle error here
}
});
}

@Override
public void displayData(List<User> list) {
Adapter adapter= new Adapter(list, new Adapter.OnItemClickListener() {
@Override
public void onClickItem(User user) {
presenter.clickItem(user);
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
}

关于java - android 列表在第一次运行时在 recyclerview 中获得 0 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53993200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com