我有一个多用户应用。 我的用户填写了我的应用中的表单,该表单被发送到" uncheckedForms"在我的firebase数据库中。我需要手动检查他们发送的表单。
表单是一个Java对象,它有一个布尔值" isPassedInspection"默认情况下设置为 false 的实例变量。
在我的手动检查之后,我直接从firebase控制台将此实例变量设置为 true ,如果按照我的标准,此表单已经通过&#34; <#34;
另一方面,我的数据库中有第二个项目名为&#34; forms&#34;表示已经通过我的手动检查的活动表格,以及他们的&#34; isPassedInspection&#34;设置为 true 。
我的所有应用用户都读取了相同的数据。这些数据是从&#34;表格中检索出来的。并绑定到我的应用程序中的RecyclerView。
这是插图的图像
我正在试图弄清楚如何制作我刚刚检查并将isPassedInspection更改为true的表单,以自动从&#34; uncheckedForms&#34;到&#34;表格&#34;。
我很想听听建议。 谢谢:))
答案 0 :(得分:1)
正如您所说,您想要从控制台检查表单,然后将数据从uncheckedForms传输到Forms。这是您可以实施的可能方式。
方式1.使用firebase云数据库功能。
从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(); } }); //
方式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);