【发布时间】:2020-11-28 20:50:01
【问题描述】:
我从 Firebase 实时数据库切换到 Firestore 在实时数据库中,我将此代码用于以下系统:
checkFollowingStatus(user.getUID(), holder.followButton)
holder.followButton.setOnClickListener {
if(holder.followButton.text.toString() == "Follow")
{
firebaseUser?.uid.let { it1 ->
FirebaseDatabase.getInstance().reference
.child("Follow").child(it1.toString())
.child("Following").child(user.getUID())
.setValue(true).addOnCompleteListener { task ->
if (task.isSuccessful) {
firebaseUser?.uid.let { it ->
FirebaseDatabase.getInstance().reference
.child("Follow").child(user.getUID())
.child("Followers").child(it.toString())
.setValue(true).addOnCompleteListener { task ->
if (task.isSuccessful) {
}
}
}
}
}
}
}
else
{
firebaseUser?.uid.let { it1 ->
FirebaseDatabase.getInstance().reference
.child("Follow").child(it1.toString())
.child("Following").child(user.getUID())
.removeValue().addOnCompleteListener { task ->
if (task.isSuccessful) {
firebaseUser?.uid.let { it1 ->
FirebaseDatabase.getInstance().reference
.child("Follow").child(user.getUID())
.child("Followers").child(it1.toString())
.removeValue().addOnCompleteListener { task ->
if (task.isSuccessful) {
}
}
}
}
}
}
} }
private fun checkFollowingStatus(uid: String, followButton: Button) {
val followingRef = firebaseUser?.uid.let { it1 ->
FirebaseDatabase.getInstance().reference
.child("Follow").child(it1.toString())
.child("Following")
}
followingRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(datasnapshot: DataSnapshot) {
if (datasnapshot.child(uid).exists()) {
followButton.text = "Unfollow"
} else {
followButton.text = "Follow"
}
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
它在实时数据库中看起来像这样
+关注
+用户ID
+关注
+usersId...
+关注者
+usersId...
如何将其转换为 Firestore 或如何在 Firestore 数据库中构建关注系统?
【问题讨论】:
-
你可以用类似的方式构造它,但是在 Followers 和 Followers 中的 userId 节点之后,你必须添加一些与该 userId 相关的字段。表示 Follow = collection、userId = Document、Following 或 Followers = Collection、userId = Document,最后是与该特定 UID 相关的字段
-
是的,我试了一下,但是在有 .set(true).addOnCompleteListener 的行中有错误(我将 setValue(true) 转换为 set(true) 我不知道这是否正确) ...这是错误:“数据必须是 Map
或合适的 POJO 对象,但它的类型是:java.lang.Boolean setvalue” -
在 firebase 数据库中,您的叶节点看起来像这样,键:值,您的错误是告诉您必须将叶节点放在那里,即键:值对在您的 set 方法中。创建一个hashmap并将key和value放入hashmap并将hashmap传递给set方法
-
我还是个初学者,能用kotlin代码解释一下吗?
标签: java android firebase kotlin google-cloud-firestore