如何为连接到firebase中的用户ID的新节点生成唯一ID

时间:2018-04-12 14:19:00

标签: android firebase firebase-realtime-database

我已经创建了一个将数据保存到firebase的Android应用程序。一旦用户创建帐户,他们就可以编辑他们的配置文件,以下数据引用是我用来将数据存储在firebase中的原因:

myRef =FirebaseDatabase.getInstance().getReference().child("Users").child(firebaseAuth.getCurrentUser().getUid());

用户个人资料中提示用户的数据是:

用户名,摘要,详细信息,状态,专业和个人资料图片

使用myref,我可以从表单中将值保存到firebase

    final String username, userSummary,userStatus,userProfession,userDetail;

    myRef.child("username").setValue(username);
                    myRef.child("summary").setValue(userSummary);
                    myRef.child("status").setValue(userStatus);
                    myRef.child("details").setValue(userDetail);
                    myRef.child("profession").setValue(userProfession);

为了将userProfession保存在firebase中的新节点中。 我设法在新节点中创建和保存专业,如下所示:使用新引用(proffref)并将数据保存到专业节点

proffRef = FirebaseDatabase.getInstance().getReference().child("Professions").child(firebaseAuth.getCurrentUser().getUid());

获取值并将其保存到数据库

proffRef.child("userid").setValue(firebaseAuth.getCurrentUser().getUid());
                    proffRef.child("proffid").setValue(imageUrl.toString());

但是现在我要做的是为每个职业生成一个唯一的ID,以便我可以将其解析为app上的单独列表。我希望将新节点(专业)链接到用户ID,以便在用户点击包含设计师的类别......然后他们可以看到所有设计师的列表。此外,列表正在一个标签片段中解析。我需要能够点击一个类别并转到一个项目列表在一项活动中。但我的主要问题是,如何为专业生成一个唯一的ID?

2 个答案:

答案 0 :(得分:1)

push()上的DatabaseReference方法返回一个新的DatabaseReference,在原始引用下使用唯一键。然后,您可以设置()在该引用上需要的任何数据,以在该新位置写入更多数据。

如果由于某种原因你不想使用push(),你总是可以使用UUID.randomUUID()生成一个UUID,然后在其上调用toString()。

答案 1 :(得分:1)

您需要使用推送()

为您的文字元素或您尝试在应用中使用的任何对象分配新ID,以表示/保留您的ID:

profid = findViewById(R.id.proffid );

然后将其分配给您的字符串:

proffessionid = profid.getText().toString().trim();

然后使用push()存储并生成唯一ID:

 proffRef.push().setValue(proffessionid);

对于proffRef下的每个条目,都会生成一个新的ID。

您还可以创建一个节点,使userid直接连接到新的职业节点,如下所示:

proffRef = FirebaseDatabase.getInstance().getReference().child("Professions").child(firebaseAuth.getCurrentUser().getUid());
  proffRef.child("userid").setValue(firebaseAuth.getCurrentUser().getUid()
                  proffRef.child("profession").setValue(userProfession);

然后在用户保存表单时使用push生成唯一键。

proffRef.push().setValue(proffessionid);

我不确定你是否想要显示这个id。但是如果你不想显示id,我建议你在你的pojo类/ modal类中声明proffID然后使用GetProffID。或者,附加id到您的textview然后将其可见性设置为不可见。  因此,在这种情况下,profid将附加到您的textview,如下所示:

<TextView
            android:id="@+id/proffid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="invisible"
             />

只要对正在创建的节点使用相同的引用,用户在表单中输入的所有数据都将保存到该特定的根节点(专业)。

另一种方法是将id直接绑定到EditText:

定义变量:

EditText userProfessionEdit;

为您的变量提供您的用户界面的ID

 userProfessionEdit = findViewById(R.id.UserProfession);

获取字符串:

userProfession = userProfessionEdit.getText().toString().trim();

将String绑定到您的id,生成唯一ID .......:

 String value = userProfessionEdit.getText().toString();
 String key = profid.getText().toString();
 DatabaseReference  childRef =  proffRef.child(key);
 childRef.push().setValue(value);

这将为每个输入生成一个唯一的id,而不给id为profid的子节点。