在Android Firebase数据库中编写新数据

时间:2016-09-16 16:48:41

标签: android firebase firebase-realtime-database

我在Android应用程序中使用Firebase数据库,每次注册用户时,我都会在数据库中存储一些值,为此我正在做以下事情:

database =  FirebaseDatabase.getInstance();
                            DatabaseReference mRef =  database.getReference().child("Users").push();
                            FirebaseUser user =  mAuth.getCurrentUser();
                            String userId = user.getUid();
                            mRef.child("User").child("age").setValue(selectedAge);
                            mRef.child("User").child("gender").setValue(finalGender);
                            mRef.child("User").child("userId").setValue(userId);
                            mRef.child("User").child("username").setValue(username);

但是当我去我的firebase控制台时,我发现自动生成了一种我不需要的id,因为你可以在图像中看到我设置了自己的id。

enter image description here

有没有办法避免这种情况,并创建节点,如图像中的第二个用户节点?

注意:我手动添加的第二个用户节点

2 个答案:

答案 0 :(得分:2)

在这里直接回答你的问题是我建议的改变:

FirebaseDatabase database =  FirebaseDatabase.getInstance();
FirebaseUser user =  mAuth.getCurrentUser();
String userId = user.getUid();
DatabaseReference mRef =  database.getReference().child("Users").child(userId);
mRef.child("age").setValue(selectedAge);
mRef.child("gender").setValue(finalGender);
mRef.child("username").setValue(username);

我还建议您创建一个Java类来表示要存储在数据库中的任何用户数据。利用Firebase使用Java类读取/写入数据库的能力将使这些操作更加容易。例如,您将User类添加到项目中,如下所示:

public class User {

    public double age;
    public String gender;
    public String userName;

    //required default constructor
    public User() {
    }

    public User(double age, String gender, String userName) {
        this.age = age;
        this.gender = gender;
        this.userName = userName;
    }

    public double getAge() {
        return age;
    }

    public void setAge(double age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

通过使用java类写入数据库,您可以更新您的写操作:

FirebaseDatabase database =  FirebaseDatabase.getInstance(); 
FirebaseUser user =  mAuth.getCurrentUser();
String userId = user.getUid();
User user = new User(26, "M", "user001");
DatabaseReference mRef =  database.getReference().child("Users").child(userId);
mRef.setValue(user);

请注意,Java对象中的商店用户uid没有字段。这取决于你,但我没有包含它有两个原因。首先,在数据库中,我们使用用户uid作为将数据存储在唯一位置的密钥。其次,由于您使用的是Firebase身份验证,因此如果您需要获取当前登录用户的ID,则可以在应用中通过FirebaseAuth访问它。

答案 1 :(得分:1)

只需更改此行:

DatabaseReference mRef =  database.getReference().child("Users").push();

到此:

DatabaseReference mRef =  database.getReference().child("Users");

push()会自动添加一个唯一键。