【问题标题】:Issue with List(); function by Firebase StorageList() 的问题; Firebase 存储的功能
【发布时间】:2020-05-22 05:45:30
【问题描述】:

我正在尝试列出从我的 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
    }
  }
}

【问题讨论】:

  • 您在调用reference.list(10)之前是否进行了身份验证?
  • 是的,我做到了……!!它只是向我显示一个空屏幕,没有别的,甚至没有错误
  • 我发现了问题,当 .getDownloadUrl();被称为它不返回字符串 url 而是返回一个包名称,如 com.google.package.gms.task@z1562646 blah.. blah.. 现在帮我解决这个问题。

标签: java android firebase firebase-storage


【解决方案1】:

getDownloadUrl() 不直接返回Uri,而是返回Task&lt;Uri&gt;。您必须添加一个回调,使用 addOnSuccessListener()addOnFailureListener() 来通知实际值(就像您对列表本身所做的那样)。

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

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2020-11-22
    • 2018-10-23
    • 2021-10-16
    • 2017-10-09
    相关资源
    最近更新 更多