【问题标题】:storageReference.getDownloadUrl() is returning null for audio file stored in firebasestorageReference.getDownloadUrl() 为存储在 firebase 中的音频文件返回 null
【发布时间】:2017-10-27 22:38:05
【问题描述】:

我正在尝试获取存储在 Firebase 存储中的 mp3 文件的下载 url。 firebase 上的存储路径是“Categories/numbers/one.mp3”。 下面是我用来获取下载网址的代码,但似乎它不起作用。我将 downloadUrl 设为 null。

有人可以帮忙吗?

代码:

    mediaPlayer = new MediaPlayer();

            storageReference = FirebaseStorage.getInstance().getReference().child("Categories").child(mCategory).child("one.mp3");
            storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    try {
                        mediaPlayer.setDataSource(uri.toString());
                        mediaPlayer.prepare();
                        mediaPlayer.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });

【问题讨论】:

  • 请使用 stacktrace 更新您的问题
  • 您可以将您的 mp3 文件记录存储在数据库中,然后简单地检索数据模型对象并获取 url。?

标签: android firebase firebase-storage


【解决方案1】:

你应该这样做

storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                try {
                      @SuppressWarnings("VisibleForTests") Uri downloadUrl = 
                         taskSnapshot.getDownloadUrl();
                        uploadImageUrl = downloadUrl.toString();
                    Toast.makeText(getApplicationContext(), "url to your file..."+uploadImageUrl, Toast.LENGTH_SHORT).show();
                    //rest your code
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

【讨论】:

  • 感谢您的回复。你能解释一下为什么我们需要使用 UploadTask.TaskSnapshot 吗?
  • @VarunAM 查找我使用的下载 Url UploadTask.TaskSnapshot,它有一个 inbuild 方法,可以获取 firebase 存储上任何文件的 url:-- Uri getDownloadUrl() 返回一个长期存在的下载 URL一个可撤销的令牌。
  • @VarunAM 乐于提供帮助
【解决方案2】:

希望这可能会奏效!

storageRef.child("Categories").child(mCategory).child("one.mp3").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {

try {
                    mediaPlayer.setDataSource(uri.toString());
                    mediaPlayer.prepare();
                    mediaPlayer.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }

}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
}
});
// Alternative way
storageRef.child("Categories").child(mCategory).child("one.mp3").getDownloadUrl().getResult();


 StorageReference storageRef = FirebaseStorage.getInstance().getReference();

【讨论】:

  • 请上传 Firebase 存储图片!
  • @VarunAM 还有一件事你可以做..?在包含 Url 的节点中添加一个子节点并将其存储在 firebase 数据库中,然后获取该节点,您将获得您的结果。?
猜你喜欢
  • 2022-01-16
  • 2018-10-02
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 2021-05-19
  • 2011-08-26
相关资源
最近更新 更多