java - List() 的问题;Firebase 存储的功能
问题描述
我正在尝试列出从我的 Firebase 存储到应用程序的所有图像。我知道将图像添加到存储和将链接添加到数据库的方法,但我的客户不知道这一点。因此,当我发现 Firebase 当前允许列出文件夹中的所有图像时。从过去两天开始,我一直在努力,但没有运气。
我的活动代码:
public class Events_and_Participations extends AppCompatActivity {
StorageReference reference;
RecyclerView recyclerView;
Images_Adapter adapter;
List<String> items = new ArrayList<>();
FirebaseAuth auth;
Button button;
FirebaseUser user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_events_and_participations);
Objects.requireNonNull(getSupportActionBar()).setTitle(R.string.item_title_4);
button = findViewById(R.id.login);
auth = FirebaseAuth.getInstance();
user = FirebaseAuth.getInstance().getCurrentUser();
if (user == null){
button.setVisibility(View.VISIBLE);
}else {
button.setVisibility(View.INVISIBLE);
}
reference = FirebaseStorage.getInstance().getReference("images");
button.setOnClickListener(v -> auth.signInAnonymously().addOnCompleteListener(task -> {
if (task.isSuccessful()){
Toast.makeText(this, "Loading..!!", Toast.LENGTH_SHORT).show();
}
}));
if (user != null){
reference.listAll()
.addOnSuccessListener(listResult -> {
for (StorageReference item : listResult.getItems()) {
items.add(item.getDownloadUrl().toString());
}
})
.addOnFailureListener(e -> Toast.makeText(Events_and_Participations.this, e.getMessage(), Toast.LENGTH_SHORT).show());
}
adapter = new Images_Adapter(items);
recyclerView = findViewById(R.id.events_photos);
recyclerView.setAdapter(adapter);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
}
}
我的存储规则:
rules_version = '2';
service firebase.storage {
match /b/sahrudhaya-foundation.appspot.com/o {
match /{allPaths=**} {
allow read, write : if request.auth != null
}
}
}
解决方案
getDownloadUrl()
不Uri
直接返回 a 而是 a Task<Uri>
。您必须添加一个回调,addOnSuccessListener()
并addOnFailureListener()
收到实际值的通知(就像您对列表本身所做的那样)。
您还可以使用它addOnCompleteListener
来处理成功和失败的情况。
推荐阅读
- node.js - 用 logicJS 实现 logicjs-list-spread(基本 node.js 包使用)
- tensorflow - 在 tensorflow / pytorch 中将一个列表与其他两个列表切片
- javascript - 由于 MIME 类型,未加载样式表
- python - K-Means 聚类如何帮助分析 word2vec 嵌入?
- reactjs - 将构建文件从 React 容器复制到 NGINX 容器后,是否可以热重新加载 React 应用程序?
- if-statement - Google Sheet ARRAYFORMULA(IF(ISBLANK 返回错误
- java - 服务器端的分层架构
- android - 如何在 Android 中获取附近所有设备的 MAC 地址
- python - 将 Django 测试装置加载到数据库中
- python - python 中的 Firefox selenium 失败,错误代码为 127