将数据存储在层次结构

时间:2016-12-20 18:20:47

标签: android firebase firebase-realtime-database

我正在尝试以这种格式存储用户在Firebase中的详细信息:

User-Register
|
----1
    ---username:xyz
    ---phoneNo:9055505555
    ---password:abc
----2
    ---username.........

等等。

我正在点击应用程序中的注册按钮编写此代码。 我的java代码是:

String getUsername = register_username.getText().toString();
        String getPhoneNo = register_phoneNo.getText().toString();
        String getPassword = register_password.getText().toString();

        userRegistrationInfo store_User_Details = new userRegistrationInfo(getUsername, getPhoneNo, getPassword);


        FirebaseDatabase databaseInstance = FirebaseDatabase.getInstance();
        DatabaseReference reference_for_registration = databaseInstance.getReference("UserRegister");
        String childNumber=Integer.toString(count);
        reference_for_registration.child(childNumber).setValue(store_User_Details);
        count++;

我的userRegistrationInfo类是:

public class userRegistrationInfo {

    String username;
    String phone_number;
    String password;



    public userRegistrationInfo()
    {

    }
    public userRegistrationInfo(String username,String phone_number,String password)

    {
        username=this.username;
        phone_number=this.phone_number;
        password=this.password;

    }

    public String getUsername() {
        return username;
    }

    public String getPhone_number() {
        return phone_number;
    }

    public String getPassword() {
        return password;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPhone_number(String phone_number) {
        this.phone_number = phone_number;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

在运行此代码时,我没有在数据库中获得任何内容。我正在使用count来创建对象的id。但是数据库中没有更新任何内容。

如何反映数据库中的变化?

2 个答案:

答案 0 :(得分:0)

最好从firebase获取新用户注册的唯一密钥。尝试单击应用程序中的注册按钮修改代码。

    String getUsername = register_username.getText().toString();
    String getPhoneNo = register_phoneNo.getText().toString();
    String getPassword = register_password.getText().toString();

    userRegistrationInfo store_User_Details = new userRegistrationInfo(getUsername, getPhoneNo, getPassword);

    FirebaseDatabase databaseInstance = FirebaseDatabase.getInstance();
    DatabaseReference reference_for_registration = databaseInstance.getReference();

    String key = reference_for_registration.child("UserRegister").push().getKey();

    Map<String, Object> store_User_DetailsValues = store_User_Details.toMap();

    Map<String, Object> childUpdates = new HashMap<>();

    childUpdates.put("/UserRegister/" + key, store_User_DetailsValues);

    reference_for_registration.updateChildren(childUpdates);

添加到userRegistrationInfo类

@Exclude
public Map<String, Object> toMap() {
    HashMap<String, Object> result = new HashMap<>();
    result.put("username", username);
    result.put("phone_number", phone_number);
    result.put("password", password);

    return result;
}

答案 1 :(得分:0)

首先,只是为了澄清一下,在您的代码中,您键入UserRegister,但在数据库格式中,它表示为User-Register。这是一个错字,或者你可能需要检查一下。

其次,您需要澄清电话号码属性。 Firebase数据库中的数据应与自定义对象中的属性get函数相同(在本例中为userRegistrationInfo类)。因此,如果您的Firebase数据库属性列为phoneNo,那么您的自定义对象应具有getPhoneNo属性来存储数据。反之亦然。

使用Firebase自动生成的唯一ID更为常见。您可以使用以下代码替换代码来完成它:

reference_for_registration.push().setValue(store_User_Details);

除此之外,我认为上面的代码应该可以正常工作。尝试在.addOnCompleteListener的末尾添加setValue(store_User_Details)。如果出现问题,你可以从那里澄清更多细节。