我已经创建了一个将数据保存到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?
答案 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的子节点。