Firebase检索当前子项,然后设置为另一个子Android的子项

时间:2018-03-15 11:11:51

标签: android firebase firebase-realtime-database

** 已编辑 **

我需要有关Firebase的帮助。我需要做的是:

  1. 创建名为令牌的新数据库引用(与客户端和工作人员一致),并在令牌下创建;
  2. 根据当前用户的子项(例如,木匠,管道工或电工)创建另一个新的数据库引用
  3. 当前代码:

        FirebaseDatabase db = FirebaseDatabase.getInstance();
    
        DatabaseReference tokens = db.getReference(Common.token_table);
    
        Token token = new Token(FirebaseInstanceId.getInstance().getToken());
        //if user is already logged in, will update token
        tokens.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                .setValue(token);
    

    Current database

    我需要这样:

    See image

    Updated Screenshot

1 个答案:

答案 0 :(得分:2)

要解决此问题,您需要获取经过身份验证的用户uid,如下所示:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

拥有此uid,您可以在活动所需的每个地方使用它。因此,要根据您的数据库结构添加tokenId,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String tokenId = FirebaseInstanceId.getInstance().getToken();
rootRef.child("Tokens").child("Carpenters").child(tokenId).setValue(true);

您的数据库结构如下所示:

Firebase-root
    |
    --- Tokens
          |
          --- Carpenters
                  |
                  --- "uid1": true

根据您的编辑,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
String tokenId = FirebaseInstanceId.getInstance().getToken();
rootRef.child("Tokens").child("Plumbers").child(uid).child("token").setValue(tokenId);

enter image description here

最终答案:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
String tokenId = FirebaseInstanceId.getInstance().getToken();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference workersRef = rootRef.child("Workers");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            if (ds.child(uid).exists()) {
                rootRef.child("Tokens").child(ds.getKey()).child(uid).child("token").setValue(tokenId);
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
workersRef.addListenerForSingleValueEvent(valueEventListener);