Android Firebase:用户发送数据进行人工检查,如果检查通过,则为每个人提供数据

时间:2018-02-05 04:04:52

标签: java android firebase firebase-realtime-database firebase-console

我有一个多用户应用。 我的用户填写了我的应用中的表单,该表单被发送到" uncheckedForms"在我的firebase数据库中。我需要手动检查他们发送的表单。

表单是一个Java对象,它有一个布尔值" isPassedInspection"默认情况下设置为 false 的实例变量。

在我的手动检查之后,我直接从firebase控制台将此实例变量设置为 true ,如果按照我的标准,此表单已经通过&#34; <#34;

另一方面,我的数据库中有第二个项目名为&#34; forms&#34;表示已经通过我的手动检查的活动表格,以及他们的&#34; isPassedInspection&#34;设置为 true

我的所有应用用户都读取了相同的数据。这些数据是从&#34;表格中检索出来的。并绑定到我的应用程序中的RecyclerView。

这是插图的图像

enter image description here

我正在试图弄清楚如何制作我刚刚检查并将isPassedInspection更改为true的表单,以自动从&#34; uncheckedForms&#34;到&#34;表格&#34;。

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

2 个答案:

答案 0 :(得分:1)

正如您所说,您想要从控制台检查表单,然后将数据从uncheckedForms传输到Forms。这是您可以实施的可能方式。

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

  • 在uncheckedForms中启动观察者
  • 如果有任何更改,请检查isPassedInspection == true。
  • 如果为true,则将数据从uncheckedForms复制到表单
  • 从uncheckedForms中删除数据

    exports.checkedForms = functions.database.ref(&#39; / uncheckedForms / {formsKey}&#39;)。onWrite(event =&gt; {             var itemKey = event.data.ref.parent.key;             var formsData = event.data.val();             if(formsData.isPassedInspection == true){             formsData.isPassedInspection = TRUE;             var formsRoot = admin.database()。ref(&#34; / forms&#34;)。child(itemKey);             formsRoot.set(formsData);             var uncheckedFormsRoot = admin.database()。ref(&#34; / uncheckedForms&#34;)。child(itemKey);             uncheckedFormsRoot.remove();             } }); // enter image description here

方式2.您可以仅使用Forms表而不使用uncheckedForms来处理这种情况。在ReyclerView中,只传递那些具有

的项目
isPassedInspection=true;

答案 1 :(得分:1)

有两种方法可以实现这一目标。第一个解决方案是客户端,您可以在ValueEventListener属性上附加isPassedInspection以检查值是真还是假。如果值为true,则将该对象从uncheckedForms复制到forms。显然,在成功复制表单后,不要忘记删除表单uncheckedForms。第二种方法是在Firebase Cloud Functions编写一个具有相同目的的函数,在同一位置附加一个监听器,并检查isPassedInspection的值是否已更改,如果它已更改为true然后在另一部分复制表格。 Satish Rajbhar的功能可能有用,我没有尝试过,但请记住,这个解决方案的好处是即使用户关闭了应用程序,也可以在另一方复制表单。 / p>

如果我是你,我就不会使用这种数据库结构。我只使用了一个名为forms的节点,然后根据isPassedInspection属性查询数据库。因此,主要的想法是仅向用户显示由您检查的表单。查询应如下所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("forms").orderByChild("isPassedInspection").equalsTo(true);