【问题标题】:How can I build a follow system in Firestore [closed]如何在 Firestore 中构建关注系统 [关闭]
【发布时间】: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


【解决方案1】:
var hashMap : HashMap<String, Object> 
           = HashMap<String, Object> () 

hashMap.put("someName", true);


并将这个哈希映射传递给设置方法

databaseRefernce.addSnapshotListener(new EventListener<DocumentSnapshot or QuerySnapshot>() {

    @Override
    public void onEvent(@Nullable DocumentSnapshot value, @Nullable FirebaseFirestoreException error) {
      if (value.exists())  {
      }
    }

});

【讨论】:

  • 谢谢,它有效!但是当单击关注按钮时,它会保存在firestore中,但该按钮不会更改为取消关注。 addValueEventListener 不工作。我应该改用什么?
  • 在 OnStart 方法中,您可以侦听该特定模式下数据库中的更改并相应地更改按钮
  • 在 firebase 实时数据库中,我使用 AddValueEventListener 来监听更改,但我不知道在 firestore 中有什么替代方法。我尝试 addSnapshotListener 但我在“if(datasnapshot.child(uid).exists())”中遇到问题我无法获得 firestore @50_Seconds_Of_Coding 的正确代码
  • 你应该更多地研究文档,而不是仅仅询问堆栈溢出我更新了我的答案,请检查一下
猜你喜欢
  • 2018-04-09
  • 1970-01-01
  • 2010-11-19
  • 2011-07-12
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
相关资源
最近更新 更多