java - Android 的 Firestore 超时

标签 java android firebase google-cloud-firestore

我目前正在构建一个应用程序,将用户的博客文章保存在 Firestore 服务器中。一切正常,但我发现帖子在不稳定的网络连接下无法上传。

我试图为 Firestore 实例设置一个超时,但 Firestore 库似乎没有超时选项。问题是,因为没有超时设置,应用程序不知道何时关闭上传屏幕(微调对话框)。

我正在考虑创建一个 HandlerObservableThread 并手动设置超时。在指定的超时期限后,让应用关闭上传屏幕。但是,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/

相关文章:

java - HTTP 状态 404 -/<servlet-name> - 请求的资源 [ServletName] 不可用

java - removeAll() 时 TreeSet 中的 NullPointerException

java - 缺少 Google App Engine 应用程序的 JSON 库?

ios - Firebase REST API - 如何观察和监听变化

java - java.awt.Menu 的 RadioButtonMenuItem

java - Eclipse 不再检测丢失的 try/catch 吗?

android - 如果路径包含空格,adb 命令将无法执行

安卓放大镜效果

flutter - 当我在 Flutter 的前台或后台单击 Firebase 推送通知时导航到另一个屏幕

json - 如何在 google firebase 托管服务中使用 nodejs?