Android Firebase:用户发送数据进行人工检查,如果检查通过则将数据提供给所有人
Android Firebase: user send data for manual inspection, make data available for everyone if inspection pass
我有一个多用户应用程序。
我的用户在我的应用程序中填写表单,这些表单被发送到我的 firebase 数据库中的 "uncheckedForms"。我需要手动检查他们发送的表格。
表单是一个 Java 对象,它有一个默认设置为 false 的布尔 "isPassedInspection" 实例变量。
在我手动检查之后,我直接从 firebase 控制台将这个实例变量设置为 true,如果按照我的标准这个表单有 "passed"
另一方面,我的数据库中有第二个名为 "forms" 的项目,它表示已经通过我的手动检查的活动表单,并且它们的 "isPassedInspection" 设置为 真.
我的所有应用用户都读取相同的数据。此数据是从 "forms" 检索并绑定到我的应用程序中的 RecyclerView。
这是插图图片
我想弄清楚如何制作我刚刚检查并将 isPassedInspection 更改为 true 的表单,以自动从 "uncheckedForms" 移动到 "forms"。
我很想听听建议。
谢谢:)
正如您所说,您希望从控制台检查表单,然后将数据从未检查的表单传输到表单。这是您可以实施的可能方式。
方式一、使用firebase云数据库功能。
- 在 uncheckedForms 中启动观察器
- 当有任何变化检查时isPassedInspection==true。
- 如果为真,则将数据从 uncheckedForms 复制到表单
从未检查的表单中删除数据
exports.checkedForms = functions.database.ref('/uncheckedForms/{formsKey}').onWrite(event=>{
var itemKey=event.data.ref.parent.key;
var formsData=event.data.val();
如果(formsData.isPassedInspection ==真){
formsData.isPassedInspection=真;
var formsRoot=admin.database().ref("/forms").child(itemKey);
formsRoot.set(表格数据);
var uncheckedFormsRoot=admin.database().ref("/uncheckedForms").child(itemKey);
uncheckedFormsRoot.remove();
}
});
//
方法2。您可以仅使用Forms table 来处理这种情况,而无需使用uncheckedForms。在 ReyclerView 中只传递那些具有
的项目
isPassedInspection=true;
您可以通过两种方式实现这一目标。第一个解决方案是客户端,您可以在 isPassedInspection
属性 上附加一个 ValueEventListener
来检查值是真还是假。如果值为 true
,则将该对象从 uncheckedForms
复制到 forms
。显然,一旦复制成功,不要忘记删除表单form uncheckedForms
。第二种方法是在 Firebase Cloud Functions 中编写一个具有相同目的的函数,在同一位置附加一个侦听器并检查 isPassedInspection
的值是否已更改,如果更改为 true然后复制另一部分的表格。 Satish Rajbhar 的功能可能有用,我没有尝试过,但请记住,此解决方案的好处是即使用户关闭了应用程序,也可以在另一侧复制表单。
如果我是你,我就不会使用这种数据库结构。我只使用了一个名为 forms
的节点,然后根据 isPassedInspection
属性 查询数据库。因此,主要思想是仅向用户显示您检查过的表单。查询应如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("forms").orderByChild("isPassedInspection").equalsTo(true);
我有一个多用户应用程序。 我的用户在我的应用程序中填写表单,这些表单被发送到我的 firebase 数据库中的 "uncheckedForms"。我需要手动检查他们发送的表格。
表单是一个 Java 对象,它有一个默认设置为 false 的布尔 "isPassedInspection" 实例变量。
在我手动检查之后,我直接从 firebase 控制台将这个实例变量设置为 true,如果按照我的标准这个表单有 "passed"
另一方面,我的数据库中有第二个名为 "forms" 的项目,它表示已经通过我的手动检查的活动表单,并且它们的 "isPassedInspection" 设置为 真.
我的所有应用用户都读取相同的数据。此数据是从 "forms" 检索并绑定到我的应用程序中的 RecyclerView。
这是插图图片
我想弄清楚如何制作我刚刚检查并将 isPassedInspection 更改为 true 的表单,以自动从 "uncheckedForms" 移动到 "forms"。
我很想听听建议。 谢谢:)
正如您所说,您希望从控制台检查表单,然后将数据从未检查的表单传输到表单。这是您可以实施的可能方式。
方式一、使用firebase云数据库功能。
- 在 uncheckedForms 中启动观察器
- 当有任何变化检查时isPassedInspection==true。
- 如果为真,则将数据从 uncheckedForms 复制到表单
从未检查的表单中删除数据
exports.checkedForms = functions.database.ref('/uncheckedForms/{formsKey}').onWrite(event=>{ var itemKey=event.data.ref.parent.key; var formsData=event.data.val(); 如果(formsData.isPassedInspection ==真){ formsData.isPassedInspection=真; var formsRoot=admin.database().ref("/forms").child(itemKey); formsRoot.set(表格数据); var uncheckedFormsRoot=admin.database().ref("/uncheckedForms").child(itemKey); uncheckedFormsRoot.remove(); } }); //
方法2。您可以仅使用Forms table 来处理这种情况,而无需使用uncheckedForms。在 ReyclerView 中只传递那些具有
的项目isPassedInspection=true;
您可以通过两种方式实现这一目标。第一个解决方案是客户端,您可以在 isPassedInspection
属性 上附加一个 ValueEventListener
来检查值是真还是假。如果值为 true
,则将该对象从 uncheckedForms
复制到 forms
。显然,一旦复制成功,不要忘记删除表单form uncheckedForms
。第二种方法是在 Firebase Cloud Functions 中编写一个具有相同目的的函数,在同一位置附加一个侦听器并检查 isPassedInspection
的值是否已更改,如果更改为 true然后复制另一部分的表格。 Satish Rajbhar 的功能可能有用,我没有尝试过,但请记住,此解决方案的好处是即使用户关闭了应用程序,也可以在另一侧复制表单。
如果我是你,我就不会使用这种数据库结构。我只使用了一个名为 forms
的节点,然后根据 isPassedInspection
属性 查询数据库。因此,主要思想是仅向用户显示您检查过的表单。查询应如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("forms").orderByChild("isPassedInspection").equalsTo(true);