首页 > 解决方案 > 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
    }
  }
}

标签: javaandroidfirebasefirebase-storage

解决方案


getDownloadUrl()Uri直接返回 a 而是 a Task<Uri>。您必须添加一个回调,addOnSuccessListener()addOnFailureListener()收到实际值的通知(就像您对列表本身所做的那样)。

您还可以使用它addOnCompleteListener来处理成功和失败的情况。


推荐阅读