nkl*_*htv 7 android firebase firebase-storage google-cloud-firestore
首先我是 Firebase 新手:)
我找不到展示如何使用 Firebase Storage 和 Firebase Firestore 创建离线优先移动应用的教程或示例。我使用 Firestore 来保存有关项目的数据:id、名称、图像。我使用存储来保存图像并将这些图像与 Firestore 中的项目链接。当手机连接到互联网时,一切都很好,但我不确定在设备离线时处理添加项目的最佳方法是什么。
我能想到的唯一好的解决方案:
sessionUri
和本地文件路径,以便稍后可以恢复任务。我真的希望 Firebase 客户端库能够开箱即用地处理如此琐碎的用例。
MCVE:
public void addImageOnClick(final View view) {
final Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 123);
}
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == 123) {
save("id1", "name1", intent.getData());
}
}
private void save(final String id, final String name, final Uri imageUri) {
final Map<String, Object> item = new HashMap<>();
item.put("id", id);
item.put("name", name);
FirebaseStorage.getInstance()
.getReference("items")
.child(id)
.putFile(imageUri)
.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(final Task<UploadTask.TaskSnapshot> task) throws Exception {
return task.getResult()
.getMetadata()
.getReference()
.getDownloadUrl();
}
})
.continueWith(new Continuation<Uri, Void>() {
@Override
public Void then(final Task<Uri> task) throws Exception {
item.put("image", task.getResult().toString());
FirebaseFirestore.getInstance()
.collection("items")
.document(id)
.set(item);
return null;
}
})
.continueWith(new Continuation<Void, Void>() {
@Override
public Void then(final Task<Void> task) throws Exception {
Toast.makeText(MainActivity.this, String.valueOf(task.isSuccessful()), Toast.LENGTH_LONG).show();
return null;
}
});
}
Run Code Online (Sandbox Code Playgroud)
这实际上并不是一个可以用单个 API 解决的“小问题”。
您在这里处理的是两种不同的产品 - Cloud Storage 和 Firestore。每个都有自己的、完全独立的 API 和存储数据的方法。它们可以单独使用,也可以根据您的选择一起使用。由于您选择一起使用它们(这很棒!),您仍然需要编写代码来独立处理它们,同时还使用您想出的某种方案将它们粘合在一起。看起来你知道自己在做什么。事情并没有变得更简单。
归档时间: |
|
查看次数: |
2021 次 |
最近记录: |