【问题标题】:Unable to Show Image In ImageView From Firebase Storage无法在 Firebase 存储的 ImageView 中显示图像
【发布时间】:2016-11-05 08:56:42
【问题描述】:

我有一个应用程序允许用户将图像上传到 Firebase 存储桶,然后我获取图像文件的下载 URL 并将其添加到 Firebase 数据库。该 URL 的格式为:- https://firebasestorage.googleapis.com/v0/b/bucket_name.appspot.com/o/filename?alt=media&token=token

然后我尝试使用 Glide 将图像加载到 RecyclerView 中,但我无法这样做并且无法显示图像。

如何获得以 .png 或 .jpeg 等结尾的绝对图像 URL,可以轻松用于加载图像。据我所知,问题出在 url

【问题讨论】:

  • 如果您已经尝试过一些不起作用的方法,请编辑您的问题以包含重现问题的最少代码。见MCVE。有关使用 Glide 和 does 工作的最小示例,请参阅 Zero to App talk at I/O 的代码:gist.github.com/puf/f49a1b07e92952b44f2dc36d9af04e3c
  • 其实主要问题不在于 glide 而是在于 firebase 下载链接。以 .png 结尾的链接可以加载到该图像视图中,但是每当我使用 firebase 下载链接时,图像就不会加载
  • 同样的问题有人得到了这个解决方案吗?

标签: android firebase firebase-storage


【解决方案1】:

从相机获取图像

                    Intent i = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    startActivityForResult(i, 3);

获取图片的文件路径

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_FILE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {

      String  path=String.valueOf(data.getData());
      file = Uri.fromFile(new File(path));

创建文件元数据

  metadata = new StorageMetadata.Builder()
    .setContentType("image/jpeg")
    .build();

上传文件和元数据到路径'images/avator.jpg'

  uploadTask = storageRef.child("images/"+file.getLastPathSegment()).putFile(file, metadata);

监听状态变化、错误和上传完成。

  uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
    double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
    System.out.println("Upload is " + progress + "% done");
}
}).addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() {
@Override
public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
    System.out.println("Upload is paused");
}
}).addOnFailureListener(new OnFailureListener() {
 @Override
public void onFailure(@NonNull Exception exception) {
    // Handle unsuccessful uploads
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
    // Handle successful uploads on complete
    Uri downloadUrl = taskSnapshot.getMetadata().getDownloadUrl();

}

});

使用 Glide 库加载图像

  Glide.with(getActivity())
.load(new File(downloadUrl)) // Uri of the picture
.into(Imageview);

【讨论】:

    【解决方案2】:

    使用 Picasso,您可以使用以下方法加载简单的图像:

    Picasso.with(Activity.this).load("your url image").into(imageView);
    

    需要在 Glade 中添加:

     compile 'com.squareup.picasso:picasso:2.5.2'
    

    【讨论】:

    • 我尝试使用 Picasso 并根据此链接使用最新的库 github.com/square/picasso/issues/1574 但没有成功
    • @AnantShah 发生了哪些问题?
    • @Diego Venâncio 无法将 Firebase 存储图像的可下载 url 加载到 Picasso 库,如果我传递该 url,则不会显示任何内容。如果我使用其他(非 Firebase 存储图像网址)网址,那么它可以工作。我也更新了毕加索库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 2016-09-28
    • 2017-01-12
    • 2022-01-04
    • 2018-11-07
    • 2017-01-22
    相关资源
    最近更新 更多