java - 如何从嵌套在多个子节点中的 Firebase 调用数据?

标签 java android firebase firebase-realtime-database

我在尝试访问 Firebase 实时数据库中的嵌套子节点时遇到问题。

我遇到的错误是

com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type sg.edu.singaporetech.teamproject.users

这就是我的数据库结构: databae structure

我从这里看到了解决方案:How do I access the child nodes nested inside child node in Firebase database?

这是我尝试从 firebase 调用数据的代码:

    DatabaseReference databaseUsers;
    databaseUsers = FirebaseDatabase.getInstance().getReference("users");



        databaseUsers.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                //method is called whenever data at location is updated
                showData(dataSnapshot);
                }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        return view;
    }

    private void showData(DataSnapshot dataSnapshot) {
        FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
        String userID = currentUser.getUid();

        for (DataSnapshot uniqueIDSnapshot : dataSnapshot.getChildren()) {
            //Loop 1 to go through all child nodes of users
            for(DataSnapshot vouchersSnapshot : uniqueIDSnapshot.child(userID).getChildren()){
                //loop 2 to go through all the child nodes of vouchers node
                users user = vouchersSnapshot.getValue(users.class);
            }
        }
    }

这是来 self 的users

package sg.edu.singaporetech.teamproject;

public class users {

    String id;
    String email;
    String level;
    String steps;
    String vouchers;

    public users() {
    }

    public users(String id, String email, String level) {
        this.id = id;
        this.email = email;
        this.level = level;
        this.steps = steps;
        this.vouchers = vouchers;
    }

    public String getId() {
        return id;
    }

    public String getEmail() {
        return email;
    }

    public String getLevel() {
        return level;
    }

    public String getSteps() { return steps;}

    public String getVouchers() { return vouchers;}

    public void setId(String id) {
        this.id = id;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setLevel(String level) {
        this.level = level;
    }

    public void setSteps(String steps) {
        this.steps = steps;
    }

    public void setVouchers(String vouchers) {
        this.vouchers = vouchers;
    }
}

那么我如何才能不收到错误并具体获取当月(即 March19)的数据库结构中看到的“true”或“false”值?

非常感谢您的帮助。

最佳答案

要检索 truefalse,请尝试以下操作:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users").child(userID).child("vouchers");
mDatabaseUsers.addValueEventListener(new ValueEventListener() {
  @Override
public void onDataChange(DataSnapshot dataSnapshot) {

   String values     = dataSnapshot.child("april19").getValue(String.class);
   String boolValues = dataSnapshot.child("march19").getValue(String.class);
}

  @Override
public void onCancelled(DatabaseError databaseError) {

  }
});

此处,dataSnapshot 位于子vouchers 处,然后您无需迭代即可轻松访问 april19march19 值。

关于java - 如何从嵌套在多个子节点中的 Firebase 调用数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55439751/

相关文章:

java - JPA 更新部分记录并且没有返回错误

java - 无法在java中绘制形状

java - 如何获取在 CentOS Wildfly 服务器上运行的 Spring 应用程序的完整基本路径?

android - 检测到 Moto 360/圆形和未调用 onApplyWindowInsetsListener

firebase - Firebase OnWrite 的云函数

java - 简短的 IF - ELSE 语句

android - 导入 android.view.View;无法解析符号 'view'

java - 如何在模拟器上为所有 api 安装 android 市场

javascript - 为什么逗号不能出现在 Javascript 对象键中?

android - E/FirebaseInstanceId : Error while delivering the message: ServiceIntent not found