Android 为什么我的听众没有在这个火炉里被击中

Android 为什么我的听众没有在这个火炉里被击中,android,transactions,google-cloud-firestore,Android,Transactions,Google Cloud Firestore,我有一个奇怪的事情,OnSuccessListener或OnFailureListener停止被调用。一切正常,但当我打开移动数据和Wifi时,会调用OnSuccessListener或OnFailureListener的非 如果我在下面的代码ref.set(update)…上放置断点,断点确实被命中,但不会触发OnSuccessListener或OnFailureListener的断点 Map<String, String> update = new HashMap<>

我有一个奇怪的事情,
OnSuccessListener
OnFailureListener
停止被调用。一切正常,但当我打开移动数据和Wifi时,会调用
OnSuccessListener
OnFailureListener
的非

如果我在下面的代码
ref.set(update)…
上放置断点,断点确实被命中,但不会触发
OnSuccessListener
OnFailureListener
的断点

 Map<String, String> update = new HashMap<>();
    update.put(ByteData.DATA, data);
    DocumentReference ref = firestore
            .collection(DEVICE_DATA)
            .document(FirestoreManager.getInstance().getUserId())
            .collection(DEVICE_DATA_STREAM)
            .document(batteryEntity.getEntityId());
    ref.set(update).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
             // do some stuff
        }
    }).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
             // do some stuff
        }
    });
Map update=newhashmap();
update.put(ByteData.DATA,DATA);
DocumentReference=firestore
.收集(设备_数据)
.document(FirestoreManager.getInstance().getUserId())
.采集(设备\数据\流)
.document(batteryEntity.getEntityId());
ref.set(update).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
//做点什么
}
}).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
//做点什么
}
});
当我打开移动数据和Wifi时,会调用
OnSuccessListener
OnFailureListener

这是预期的行为。完成侦听器仅在数据写入(或被服务器拒绝)后调用


侦听器不会激发本地写入操作。如果本地写入操作失败,客户端将引发常规异常。

Firestore客户端设计为在没有internet连接的情况下继续正常运行。因此,在没有internet连接的情况下写入数据库(根据设计)不会被视为错误情况。您可以为完成侦听器构建超时机制,或者自行检测是否存在internet连接。我还建议观看[了解云Firestore](Firestore.video)中的最新一集,其中包括。没有内置的内容。因此,您必须使用类似于
计时器的东西自己构建它。一个快速显示了许多有前途的链接开始。正如所说的:FixSt店客户端不考虑网络连接的故障情况,因为它通过恢复连接一次就可以优雅地处理这个条件。唯一需要internet连接的写入操作类型是事务。处理连接的最佳方法是向用户显示写入的实际状态,这可以通过完成侦听器完成,或者通过观察同一文档并检查其元数据来查看是否有挂起的写入:。我了解该用例,因为这很常见。这就是我在中迭代选项的原因。检测互联网是很常见的。