代码之家  ›  专栏  ›  技术社区  ›  Richard Miller

Android Firebase:用户发送数据进行手动检查,如果检查通过,则所有人都可以使用数据

  •  0
  • Richard Miller  · 技术社区  · 8 年前

    我有一个多用户应用程序。 我的用户在我的应用程序中填写表单,然后发送到我的firebase数据库中的“uncheckedForms”。我需要 手动操作 检查他们发送的表格。

    表单是一个Java对象,其布尔“isPassedInspection”实例变量设置为 错误 默认情况下。

    手动检查后,我将此实例变量设置为 真的 如果按照我的标准,此表单已“通过”,则直接从firebase控制台

    另一方面,我的数据库中还有一个名为“表单”的项目,它表示已通过手动检查的活动表单,其“isPassedInspection”设置为 真的 .

    我的所有应用程序用户都读取相同的数据。此数据从“表单”中检索并绑定到我的应用程序中的RecyclerView。

    这是一幅插图

    enter image description here

    我正试图找出如何使我刚刚检查过的表单变为true,从而自动从“uncheckedForms”移动到“forms”。

    我很想听听建议。 谢谢:)

    2 回复  |  直到 8 年前
        1
  •  1
  •   Alex Mamo    8 年前

    有两种方法可以实现这一点。第一个解决方案是客户端,您可以在其中附加 ValueEventListener 上 isPassedInspection 属性检查值是否为true或false。如果值为 true ,然后从 uncheckedForms 到 forms . 显然,不要忘记删除表单表单 未选中的表单 ,一旦成功复制表单。第二种方法是在 Firebase Cloud Functions ,具有相同的目的,将侦听器附加到同一位置,并检查 iPassedInspection 已更改,如果更改为true,则在其他部分复制表单。Satish Rajbhar的函数可能会起作用,我没有尝试过,但请记住,此解决方案的好处是,即使用户关闭了应用程序,也可以在另一端复制表单。

    如果我是你,我就不会使用这种数据库结构。我只使用了一个名为 形式 然后根据 iPassedInspection 所有物因此,主要的想法是只向用户显示您选中的表单。查询应如下所示:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    Query query = rootRef.child("forms").orderByChild("isPassedInspection").equalsTo(true);
    
        2
  •  1
  •   Satish Rajbhar    8 年前

    正如您所说的,您希望从控制台检查表单,然后将数据从未选中的表单传输到表单。以下是您可以实现的可能方法。

    方式1。使用firebase云数据库功能。

    • 以未选中的格式启动观察器
    • 当有任何更改时,检查isPassedInspection==true。
    • 如果为true,则将数据从未选中的表单复制到表单
    • 从未选中的表单中删除数据

      出口。checkedForms=函数。数据库ref(“/取消选中dforms/{formsKey}”)。onWrite(事件=>{ var itemKey=事件。数据参考父项。钥匙 var formsData=事件。数据val(); if(formsData.isPassedInspection==真){ formsData。isPassedInspection=真; var formsRoot=管理。数据库()。参考(“/表格”)。子项(itemKey); formsRoot。set(formsData); var uncheckedFormsRoot=管理员。数据库()。ref(“/未选中表单”)。子项(itemKey); 取消选中msroot。删除(); } }); // enter image description here

    方式2。您可以仅通过表单表处理这种情况,而不使用未选中的表单。在ReyclerView中,只传递那些

    isPassedInspection=true;