为了账号安全,请及时绑定邮箱和手机立即绑定

在将文档接受到集合 Cloud Firestore 之前尝试添加检查

在将文档接受到集合 Cloud Firestore 之前尝试添加检查

料青山看我应如是 2021-08-06 11:17:40
我正在构建一个 qr 考勤扫描仪,并希望查看扫描是否在我的收藏中的start和end时间字段的限制范围内session。如果扫描发生在两次之间,则应被接受,否则将不被接受并显示祝酒词。目前我有它检查会话是否只存在而不是在开始和结束时间字段的时间之间。rawData 是sessionID从二维码中提取的,一旦提取,它会检查它是否是有效的 sessionID。现在我只需要检查扫描时间。任何帮助都会很棒:private void barcodeRecognition(Bitmap photo) {    FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(photo);    FirebaseVisionBarcodeDetector detector = FirebaseVision.getInstance()            .getVisionBarcodeDetector();    Task<List<FirebaseVisionBarcode>> result = detector.detectInImage(image)            .addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionBarcode>>() {                @Override                public void onSuccess(List<FirebaseVisionBarcode> barcodes) {                    for (FirebaseVisionBarcode barcode: barcodes) {                        Rect bounds = barcode.getBoundingBox();                        Point[] corners = barcode.getCornerPoints();                        final String rawValue = barcode.getRawValue();                        int valueType =  barcode.getValueType();                        mAuth.getCurrentUser();                        // TRY LINKING TO userUID on Attendance on Firebase console                        FirebaseUser currentUser = mAuth.getCurrentUser();                        final String user = currentUser.getUid(); // USED TO GET CURRENT USER UID OF PERSON LOGGED IN                        //THIS CAN BE SET TO .getUserName() or getEmail() depending on preference                                    }                                }                            }                        });
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

根据您的数据库结构,根据您startTime和endTime属性的限制过滤数据,请使用以下查询:


FirebaseFirestore rootRef = FirebaseFirestore.getInstance();

Query query = rootRef.collection("session")

    .whereGreaterThanOrEqualTo("startTime", timeToCheck)

    .whereLessThanOrEqualTo("endTime", timeToCheck);

如果不想平等,也可以使用以下代码:


FirebaseFirestore rootRef = FirebaseFirestore.getInstance();

Query query = rootRef.collection("session")

    .whereGreaterThan("startTime", timeToCheck)

    .whereLessThan("endTime", timeToCheck);

因此,使用此代码,您将能够获取session会话集合中开始和结束时间字段范围内的所有对象。


编辑:


如果要检查单个文档,则需要使用另一个 if 语句。所以在你的实际中if (document.exists()){创建另一个看起来像这样的:


Attendance attendance = document.toObject(Attendance.class);

Date startTime = attendance.getStartTime();

Date endTime = attendance.getEndTime();

if(timeToCheck.after(startTime) && (timeToCheck.before(endTime)) {

    //Do what you need to do

}

其中timeToCheck是一个类型的对象Date,您需要检查数据库中的实际日期。


查看完整回答
反对 回复 2021-08-06
  • 1 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信