【问题标题】:FireBase Real Time DatabaseFireBase 实时数据库
【发布时间】:2020-07-05 22:10:30
【问题描述】:

我在 Android 应用程序中使用 Firebase 数据库,每次用户唱歌时,我都会在数据库中存储一些值,为此我正在执行以下操作:

@Override
public void writeObject(IUser object) {
    User usrReal = (User) object ; // this userReal's reference same with parameter
    User usrCopy = new User(usrReal); // copy of it
    String usrId = usrCopy.getUserId();

    databaseReference.child("usrId").setValue(usrCopy);
    //databaseReference = this.databaseReference  = FirebaseDatabase.getInstance().getReference().child(path) is defined beginning of the class
}

正如您在子方法中看到的,如果称为“usrId”,它会创建 usrId 目录并在其中添加所有必需的信息。但我想为每个用户创建目录,所以我尝试将 usrId 变量作为参数传递。但是它不起作用。当我调试代码调试器时说 Local var usrId 无法识别。我的问题是如何在 Firebase wrt 中创建嵌套结构。用户 ID。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    如果userId是firebase认证生成的id,那么你可以这样做:

    String userId = user.getUid();
    this.databaseReference  = FirebaseDatabase.getInstance().getReference().child("Users");
    this.databaseReference.child(userId).child("name").setValue("peter");
    

    那么你就会有这样的结构:

    Users
      userId 
        name : peter
      userId1
        name : john
    

    【讨论】:

    • 我从 android.os.Build.ID 生成 ids 来检测发送请求的设备。在这种情况下,我的变量会导致运行时错误。
    • 为什么不从 firebase 身份验证或 push() 方法获取 id
    • 我刚刚开始使用 push() 方法。但它每次都会创造不同的价值,所以我每次都应该遍历所有基础以找到正确的用户标识符,我必须获取所有数据并在客户端设备上搜索它。我想在服务器端访问数据。
    • 在您的代码中,您是否尝试过使用 String usrId = usrCopy.getUserId(); databaseReference.child("usrId").setValue(userId); userId 而不是 userCopy
    • 当然我试过了,databaseReference.child("usrId") 如果我们得到这样的“usr id”,我们不能在那个位置写入超过 1 个对象。因为 firebase 会覆盖它。
    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 2017-06-03
    • 2016-12-04
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2017-10-06
    • 2020-07-19
    相关资源
    最近更新 更多