android - 如何使用 `listAll()` 方法获取 Firebase 存储项目的数据?
问题描述
我知道文档显示了如何列出这样的项目:
listRef.listAll()
.addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult listResult) {
for (StorageReference prefix : listResult.getPrefixes()) {
// All the prefixes under listRef.
// You may call listAll() recursively on them.
}
for (StorageReference item : listResult.getItems()) {
// All the items under listRef.
}
}
})
...但是我怎样才能得到我的数据item
呢?例如,图像 uri 或元数据。
public class Wallpaper {
private String wallpaperName;
private Uri imageUri;
public Wallpaper(String wallpaperName, Uri imageUri) {
this.wallpaperName = wallpaperName;
this.imageUri = imageUri;
}
public Wallpaper() {
}
public String getWallpaperName() {
return wallpaperName;
}
public void setWallpaperName(String wallpaperName) {
this.wallpaperName = wallpaperName;
}
public Uri getImageUri() {
return imageUri;
}
public void setImageUri(Uri imageUri) {
this.imageUri = imageUri;
}
}
public class ShowWallpapers extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerViewAdapter recyclerViewAdapter;
private List<Wallpaper> wallpaperList;
private StorageReference storageReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_wallpapers);
storageReference = FirebaseStorage.getInstance().getReference("wallpapers");
recyclerView = findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
wallpaperList = new ArrayList<>();
storageReference.listAll()
.addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult listResult) {
for (StorageReference item : listResult.getItems()) {
// i want to set-up my Wallpaper object here and add it to my list
// but how can i do that
}
recyclerViewAdapter = new RecyclerViewAdapter(ShowWallpapers.this,
wallpaperList);
recyclerView.setAdapter(recyclerViewAdapter);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
}
我的存储的控制台视图:https ://i.imgur.com/jnjW6Ko.png
解决方案
有关于如何从StorageReference
. 您可能还想一般地查看StorageReference文档,因为基本上您在列出引用时想要做的任何事情都应该在那里:)
在这种情况下,一旦您在成功处理程序中listAll()
,开始启动任务以getMetadata()
从存储引用中获取下载 URL(或元数据,使用和类似方法)。
就像是:
storageReference.listAll()
.addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult listResult) {
for (StorageReference item : listResult.getItems()) {
item.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
// Do whatever you need here.
Log.w(TAG, "downloadUrl:" + uri.toString());
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});
}
}
});
当然,上面的内容不会下降到引用位置(通过getPrefixes()
)的任何前缀,它只是列出了在该引用处直接可用的 blob。
推荐阅读
- android - Android Studio NativeActivity 未定义对“输入队列 hasEvents”的引用
- python - python re.match() 不返回预期结果
- rest - 添加 include_docs=true 时 CouchDB seq 编号发生变化
- c# - 如何显示按产品类型和月份分组的产品计数?
- python-3.x - ystockquote 上的 HTTP 错误
- angular - Angular - 无法绑定到“属性”,因为它不是“a”的已知属性
- php - 从端点查询循环对象
- mysql - 如何在 MySQL 的 JSON 路径中使用 CONCAT?
- amazon-web-services - Ubuntu 18.04 上 MariaDB 的 aws 密钥管理插件在哪里?
- jmeter - 如何从 JMeter 中的全局变量中获取值