我正在开发一个使用Firebase的Firestore将数据发送到Web的应用程序。该应用程序的功能之一是能够在脱机时将数据保存在设备中,并在恢复互联网连接后将其发送到Firestore。我激活了离线持久性,但无法正常工作。
调试控制台:
W/OkHttpClientTransport(28536): Failed closing connection
W/OkHttpClientTransport(28536): javax.net.ssl.SSLException: Write error: ssl=0x7f7acfc408: I/O error during system call, Broken pipe
W/OkHttpClientTransport(28536): at com.google.android.gms.org.conscrypt.NativeCrypto.SSL_write(Native Method)
W/OkHttpClientTransport(28536): at com.google.android.gms.org.conscrypt.NativeSsl.write(:com.google.android.gms@[email protected] (040406-222931072):4)
恢复互联网后,如何激活离线持久性并与Firestore同步?
我的密码:
Future<Null> sendFirebaseData(var selectedModel) async {
Firestore.instance.enablePersistence(true);
var certID = await getIDCertificado();
var dateTime = new DateTime.now();
var nowHour = new DateFormat('kk:mm:ss').format(dateTime);
Map<String, dynamic> dataHeader = {
'ID': certID,
};
Map<String, dynamic> finalDataMap = {}..addAll(dataGeneral)
..addAll(dataInstrumento)..addAll(dataPadrao)
..addAll(dataAdicional)..addAll(dataHeader);
await Firestore.instance.collection('certificados').document((certID.toString()))
.setData(finalDataMap);}
当您在Firestore中使用离线持久性时,请勿使用“交易”或await
进行响应。
因此,更改此:
await Firestore.instance.collection('certificados').document((certID.toString()))
.setData(finalDataMap);
对此:
Firestore.instance.collection('certificados').document((certID.toString()))
.setData(finalDataMap);
恢复互联网连接后,即使您处于后台,数据也将自动同步。
当您的应用关闭时不起作用。
为什么更改上面的代码以删除“ await”有效。
在服务器上成功写入文档之前,不会调用您的回调并且您的诺言也不会完成。这就是为什么如果您的UI等待直到写操作完成,它似乎会冻结在“脱机模式”,即使实际上是对本地缓存进行写操作也是如此。
它是确定不使用async / await
,.then()
或callbacks
。Firestore始终会“采取行动”,就好像立即应用了数据更改一样,因此您无需等待处理新数据。
仅在需要确保发生服务器写入并且您想要阻止其他事情发生直到获得确认之前,才需要使用回调和Promise。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句