首页 > 解决方案 > Android的Firestore超时

问题描述

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

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

我正在考虑创建一个HandlerObservableThread并手动设置超时。在指定的超时时间后,让应用关闭上传屏幕。但是,即使超时,Firestore 客户端也会继续在后台重试上传。所以这种方法不适合这种情况......

有什么解决办法吗?如果我可以为 Firestore 客户端本身设置超时,这意味着让客户端onFailure()在给定的超时期限后调用,我可以将帖子作为草稿保存在本地存储中,并在设备恢复稳定连接时再次尝试。

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


Firestore 会立即将文档添加到其本地缓存中。然后它将尝试将该文档与服务器同步。要检测它是否能够这样做,请查看加斯顿的答案。

要检测文档何时写入服务器,请使用SuccessListener. Firestore 文档中有关添加文档的此示例显示了如何:

// 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);
            }
        });

推荐阅读