我目前正在构建一个应用程序,将用户的博客文章保存在 Firestore
服务器中。一切正常,但我发现帖子在不稳定的网络连接下无法上传。
我试图为 Firestore
实例设置一个超时,但 Firestore 库似乎没有超时选项。问题是,因为没有超时设置,应用程序不知道何时关闭上传屏幕(微调对话框)。
我正在考虑创建一个 Handler
或 Observable
或 Thread
并手动设置超时。在指定的超时期限后,让应用关闭上传屏幕。但是,Firestore 客户端会在超时后继续在后台重试上传。所以这种方法不适合这种情况……
对此有什么解决方案吗?如果我可以为 Firestore 客户端本身设置超时,这意味着让客户端在给定的超时期限后调用 onFailure()
,我可以将帖子保存为本地存储中的草稿,并在设备恢复稳定连接后重试。
最佳答案
Firestore 会立即将文档添加到其本地缓存中。然后它将尝试将该文档与服务器同步。要检测它是否能够这样做,请查看 Gastón 的回答。
要检测何时将文档写入服务器,请使用SuccessListener
。此示例来自 Firestore documentation on adding documents显示如何:
// Add a new document with a generated id. Map<String, Object> data = new HashMap<>(); data.put("name", "Tokyo"); data.put("country", "Japan"); db.collection("cities") .add(data) .addOnSuccessListener(new OnSuccessListener<DocumentReference>() { @Override public void onSuccess(DocumentReference documentReference) { Log.d(TAG, "DocumentSnapshot written with ID: " + documentReference.getId()); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "Error adding document", e); } });
关于java - Android 的 Firestore 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50594146/