【发布时间】:2019-09-05 13:12:50
【问题描述】:
我正在尝试为我的应用程序制作一个高分类型的工具,所以我正在玩一些代码,无法弄清楚搜索多个节点以找到最大价值。问题似乎是 DataSnapshot 将节点作为 HashMap 读取,并且在将值转换为 int 时没有问题。 如何阅读信息(球员姓名和球员得分),让 DataSnapshot 识别最大值并将电视设置为该值?
我尝试过的代码如下。我还将添加我的 Firebase 外观的屏幕截图,以使其在视觉上更容易理解
我的 WriteToFirebase 活动
public void gFirebase(View view){
int score = (int) (Math.random() * ((50)+1));
Player p1 = new Player();
p1.setName("Player 1");
p1.setScore(score);
DatabaseReference roofRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference gameInfoRef = roofRef.child("hiscore").child("player_name").push();
gameInfoRef.setValue(p1);
}
public void lFirebase(View view){
int score = (int) (Math.random() * ((50)+1));
Player p2 = new Player();
p2.setName("Player 2");
p2.setScore(score);
DatabaseReference roofRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference gameInfoRef = roofRef.child("hiscore").child("player_name").push();
gameInfoRef.setValue(p2);
}
public void sFirebase(View view){
int score = (int) (Math.random() * ((50)+1));
Player p3 = new Player();
p3.setName("Player 3");
p3.setScore(score);
DatabaseReference roofRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference gameInfoRef = roofRef.child("hiscore").child("player_name").push();
gameInfoRef.setValue(p3);
}
我的 ReadFromFirebase 活动
public void readFromFirebase(View view) {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference hiscoreRef = rootRef.child("hiscore").child("player_name");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
int hiscore = 0;
for (DataSnapshot ds : dataSnapshot.getChildren()) {
int value = ds.getValue(Integer.class);
if (hiscore < value) {
hiscore = value;
}
Log.d("TAG", String.valueOf(hiscore));
ChangeMe.setText(hiscore);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
hiscoreRef.addListenerForSingleValueEvent(eventListener);
}
预期结果是我屏幕上的文本视图更改为我的 Firebase 系统中的最高数字(最高分)
我的数据库的 JSON 树
{
"hiscore" : {
"player_name" : {
"-Lo0W8ks7WCEsrym5Qpl" : {
"name" : "Player 3",
"score" : 24
},
"-Lo0W92WqeUMdq_y7J8M" : {
"name" : "Player 2",
"score" : 42
},
"-Lo0W9KjzXE_XCU4K8MN" : {
"name" : "Player 1",
"score" : 43
}
}
}
}
【问题讨论】:
-
您能否编辑您的问题以包含来自数据库相关部分的 JSON 的 sn-p(作为文本,请不要截图)?您可以通过单击 Firebase Database console 的溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。
-
请将您的数据库结构添加为 JSON 文件或至少作为屏幕截图。也请回复@AlexMamo
-
我现在已经这样做了。 @AlexMamo
-
所以基本上你想从这三个对象中获得最高分,即 43,对吧?
-
是的,正确的。阅读这些值并确定最高分,即 43。
标签: java android firebase firebase-realtime-database