java - Android的Firestore超时
问题描述
我目前正在构建一个将用户的博客文章保存在Firestore
服务器中的应用程序。一切正常,但我发现帖子不是在不稳定的互联网连接下上传的。
我试图为实例设置超时Firestore
,但似乎 Firestore 库没有超时选项。问题是,因为没有超时设置,应用程序不知道何时关闭上传屏幕(Spinner 对话框)。
我正在考虑创建一个Handler
或Observable
或Thread
并手动设置超时。在指定的超时时间后,让应用关闭上传屏幕。但是,即使超时,Firestore 客户端也会继续在后台重试上传。所以这种方法不适合这种情况......
有什么解决办法吗?如果我可以为 Firestore 客户端本身设置超时,这意味着让客户端onFailure()
在给定的超时期限后调用,我可以将帖子作为草稿保存在本地存储中,并在设备恢复稳定连接时再次尝试。
解决方案
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); } });
推荐阅读
- forms - Xamarin Shell 引发模糊路由匹配异常
- javascript - 我正在尝试通过从 TMDB API 加载的数组进行映射
- django - 无法在 Django -Dialogflow 集成中更改时区
- python - 如何将嵌套字典写入 SQL 表
- terminal - how to select a particular version of python from command prompt
- python - 为具有递减值的列表运行 for 循环
- c++ - 如何使用 VS Code 在弹出的控制台窗口中运行程序?
- reactjs - 通过 React 获取 API 时如何使客户端的 RAM 不增长?
- python - Numpy:np.finfo 不会像预期的那样失败
- angular - 使用 ngxs 动作触发 ngx-translate