customerReference.document(customerName).set(customerDetails).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
customerReference.document(customerName).collection(firebaseUser.getUid())
.document(invoiceDate + " && " + timestampString).set(makeBillDetails)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
openPdf();
}
所以现在我正在做的是将对象设置为文档,并在获得该事务的成功后,我正在做一些其他事务。这在线上工作时效果很好但是当交易发生在离线模式时,第一个交易将在本地完成,但是听众(成功或失败)不会被触发,所以现在如何进行第二次交易?
答案 0 :(得分:1)
您在代码中执行的操作不称为事务。您只使用set()
方法将对象添加到数据库中。
因此,当网络连接丢失时(用户设备上没有网络连接),onSuccess()
和onFailure()
都不会被触发。这是Cloud Firestore
中的行为,也始终位于Firebase Realtime Database
。只有在Firebasee服务器上提交的写入才会被视为失败/成功。
Firestore为处理脱机数据提供此功能,但您需要使用addSnapshotListener
才能处理此情况。