如何正确构造Java代码以将命名键下的值保存到Firebase实时数据库
我目前正在编写一个应用程序的一部分,其中用户扫描保存用户UID值的QR码。扫描后,我想在Firebase实时数据库中创建一个新密钥,其中包含与用户相关的信息,该UID称为userInformation。以下是我希望将值存储为的格式示例: 当前,它存储时不使用UserInforomations键,仅使用UID存储,如下所示: 以下是相关代码:如何正确构造Java代码以将命名键下的值保存到Firebase实时数据库,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我目前正在编写一个应用程序的一部分,其中用户扫描保存用户UID值的QR码。扫描后,我想在Firebase实时数据库中创建一个新密钥,其中包含与用户相关的信息,该UID称为userInformation。以下是我希望将值存储为的格式示例: 当前,它存储时不使用UserInforomations键,仅使用UID存储,如下所示: 以下是相关代码: case FirebaseVisionBarcode.TYPE_TEXT: { final Da
case FirebaseVisionBarcode.TYPE_TEXT:
{
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
userInformations = new ArrayList<>();
DatabaseReference username = ref.child(item.getRawValue()).child("username");
DatabaseReference dateOfBirth = ref.child(item.getRawValue()).child("dateOfBirth");
username.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String username = dataSnapshot.getValue(String.class);
//Toast.makeText(getApplicationContext(),username, Toast.LENGTH_LONG).show();
//it will create a unique id and we will use it as the Primary Key for our UserInfo
String id1 = ref.push().getKey();
//creating an UserInfo Object
UserInformation userInformation = new UserInformation(id1, username);
//Saving the Artist
ref.child(id1).setValue(userInformation);
//displaying a success toast
Toast.makeText(getApplicationContext(), username + " has been added", Toast.LENGTH_LONG).show();
}
我能够获取名为userInformations的密钥,但它不再保存userInformationName的值,如下所示:
目前,我只是不确定如何构造代码来实现这两个功能。根据上一篇文章,要实现如下模式:
rootRef
|
--- userInformations
|
--- pushId
|
--- "userInformationId: "-LXO5 ... H-o3-P"
|
--- "userInformationName: "spamemail0100@gmail.com"
请使用以下代码行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userInformationsRef = rootRef.child("userInformations");
String userInformationId = userInformationsRef.push().getKey();
String userInformationName = "spamemail0100@gmail.com";
UserInformation userInformation = new UserInformation(userInformationId, userInformationName);
userInformationsRef.child(userInformationId).setValue(userInformation);
因此,基本上您希望将属性的名称从
username
更改为userInformationName
,对吗?@AlexMamo问题是,这些值被保存为UID键,而不是保存在“userinformations”下。我在上面对第一张图片做了一些更改,试图解决歧义。您说:“当前它没有userinformations键存储”,但我看到该键存在<代码>用户信息操作子项在第二张图片中不存在。如果您不需要puushed键,请删除push()
调用,对吗?@AlexMamo如果可能的话,我想要唯一的ID键,如第3张图片所示。执行此操作是否需要push()调用?删除push()将意味着userInformationId的值只是“userInformations”,而不是唯一的ID。这样做的问题是没有添加userInformationName。所以您希望有这样的内容:rootRef->userInformations->pushId->userInformationId和userInformationName
对吗?
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userInformationsRef = rootRef.child("userInformations");
String userInformationId = userInformationsRef.push().getKey();
String userInformationName = "spamemail0100@gmail.com";
UserInformation userInformation = new UserInformation(userInformationId, userInformationName);
userInformationsRef.child(userInformationId).setValue(userInformation);