在 ListView 中显示 Firebase 数据:对空值进行故障排除
尝试在 ListView 中显示 Firebase 数据时,尝试检索时可能会出现问题具体值。如果您在尝试显示用户 ID 和分数时遇到空值,则必须仔细检查您的代码并确保其遵循最佳实践。
模型类的 Java 命名约定
影响正确检索数据的一个关键因素是遵守模型类的 Java 命名约定。在这种情况下,应修改“Score”模型类以匹配以下约定:
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() 方法Firebase 中的数据检索具有异步性质。这意味着甚至在您尝试将检索到的对象(类型为 Score)添加到列表之前就会调用它。因此,如果您在 onDataChange() 方法之外访问它,您的列表可能会保持为空。
修改数据检索代码
假设“score”节点是Firebase 根目录的直接子级,您可以按如下方式修改数据检索代码:
使用字符串Class
ListView listView = (ListView) findViewById(R.id.list_view); List<String> list = new ArrayList<>(); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(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 Class
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);
通过执行这些调整,您应该能够在 ListView 中成功显示 Firebase 数据,检索用户 ID 和分数均符合预期。
以上是为什么在 ListView 中显示 Firebase 数据时得到空值?的详细内容。更多信息请关注PHP中文网其他相关文章!