gpt4 book ai didi

java - 在 ListView 中显示 Firebase 数据

转载 作者:行者123 更新时间:2023-12-02 02:20:06 24 4
gpt4 key购买 nike

好的,我让它运行,显示用户 ID,但不显示分数。然后我开始做一些改变,忘记了我改变了什么,现在我又回到了 null null 。我觉得我可能删除了某些内容或拼写错误了某些内容。

   dbref.addValueEventListener(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

ArrayList<String> list = new ArrayList<>();
list.clear();

for(DataSnapshot ds :dataSnapshot.getChildren()) {
Score Result = ds.getValue(Score.class);
String userId = String.valueOf(Result.getUserId());
String score = String.valueOf(Result.getScore());
list.add(userId);
list.add(score);

}
adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, list);
LvRanking.setAdapter(adapter);
}

这是我的模型:

public class Score {
private String userId, score;

public Score() {}

public Score(String userId, String score) {
this.userId = userId;
this.score = score;
}

public String getUserId() {
return userId;
}

public String getScore() {
return score;
}

@Override
public String toString() {
return "Score{" +
"userId='" + userId + '\'' +
", score='" + score + '\'' +
'}';
}
}

数据库: Link to my database screenshot

最佳答案

这是异步 API 的一个典型问题。为了使其正常工作,请根据 Java Naming Conventions 更改您的模型类。你的类应该如下所示:

public class Score {
private String userId, score;

public Score() {}

public Score(String userId, String score) {
this.userId = userId;
this.score = score;
}

public String getUserId() {
return userId;
}

public String getScore() {
return score;
}

@Override
public String toString() {
return "Score{" +
"userId='" + userId + '\'' +
", score='" + score + '\'' +
'}';
}
}

另请注意,onDataChange() 方法具有异步行为,这意味着甚至在您尝试将 Score 类的对象添加到列表之前就会调用该方法。换句话说,您的 list 在该方法之外将始终为空。一个快速的解决方法是将列表的声明移到 onDataChange() 中,并用它做你想做的事情,或者,如果你想深入异步世界并使用我在这个 post 中的答案.

假设 score 节点是 Firebase 根的直接子节点,要使用 String 类显示数据,请使用以下代码:

ListView listView = (ListView) findViewById(R.id.list_view);
List<String> list = new ArrayList<>();
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference scoreRef = rootRef.child("score");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String userId = ds.child("userId").getValue(String.class);
String score = ds.child("score").getValue(String.class);
list.add(userId + " / " + score);
Log.d("TAG", userId + " / " + score);
}
arrayAdapter.notifyDataSetChanged();
}

@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, task.getException().getMessage());
}
};
scoreRef.addListenerForSingleValueEvent(eventListener);

这就是如何使用 Score 类显示数据。

ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Score score = ds.getValue(Score.class);
String userId = score.getUserId();
String score = score.getScore();
Log.d("TAG", userId + " / " + score);
list.add(score);
}
arrayAdapter.notifyDataSetChanged();
}

@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, task.getException().getMessage());
}
};
scoreRef.addListenerForSingleValueEvent(eventListener);

关于java - 在 ListView 中显示 Firebase 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48622480/

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