【问题标题】:Could'nt load images from Firestore with Picasso in Android recyclerview无法在 Android recyclerview 中使用 Picasso 从 Firestore 加载图像
【发布时间】:2020-01-09 21:13:05
【问题描述】:

我正在尝试使用 Android 的 RecyclerView 将存储在 Firestore 存储中的图像加载到图像视图中。上传图片不是问题,我为上传和下载配置了相同的权限。 但它只显示占位符参数中指定的图像。

我搜索了几项似乎与此问题相关的内容。然后我发现毕加索图书馆的版本和with(context)更改为get()的问题。

我将它们应用于我的代码并进行了测试。

使用 2.5.2 的毕加索版本,然后尝试使用 (mContext)。 接下来我尝试了2.71828的Picasso版本然后尝试get()

但两者都给出相同的结果,可以确认here

看来这不是毕加索的事。但我找不到合适的解决方案。

有人可以帮忙吗?

onBindViewHolder 的来源imageAdapter.java

@Override
public void onBindViewHolder(ImageViewHolder holder, int position) {
    Upload uploadCurrent = mUploads.get(position);
    holder.textViewName.setText(uploadCurrent.getName());
    Picasso.with(mContext)
            .load(uploadCurrent.getImageUrl())
            .placeholder(R.mipmap.ic_launcher)
            .fit()
            .centerCrop()
            .into(holder.imageView);

}

正如我上面提到的,get() 替换为 (mContext) 已经尝试过了。

如果您需要更多信息,请告诉我。

【问题讨论】:

  • 发生这种情况的原因很可能是您使用毕加索加载了错误的图片网址
  • 请记录您的图片网址并在此处发布
  • uploadCurrent.getImageUrl() 的值是多少?也请回复@AlexMamo
  • 当我检查 getImageUrl() 的值时,它与 Firebase 实时数据库中的值相同。但我不确定它与 Firebase 存储中图像的 URL 是否相同。

标签: java android android-recyclerview google-cloud-firestore picasso


【解决方案1】:

您可以使用回调来获取成功/错误事件。

Picasso.with(mContext)
.load(uploadCurrent.getImageUrl())
.error(R.drawable.error_image)
.into(holder.imageView, new com.squareup.picasso.Callback() {
                    @Override
                    public void onSuccess() {
                       // will load image 
                    }

                    @Override
                    public void onError() {
                       // will not load image from url
                    }
                });

【讨论】:

  • 我按照你的建议试了一下。然后我得到一个结果,所有图像都更改为error_image。我检查了 uploadCurrent.getImageUrl() 中的 URL,它表明 firebase 数据库的 URL 正确。
  • 该网址是否在浏览器中正确加载?如果是,请尝试检查您的互联网连接,或者如果您的图像尺寸太大,请尝试在毕加索中调整大小,如 .resize(200, 200);
  • 不,实际上不是。 “com.google.android.gms.tasks.zzu@9bdfc92”这是我数据库中的网址之一。但它看起来不是图片的正确网址。
  • 检查这个你的问题是一样的stackoverflow.com/questions/57183427/…
【解决方案2】:

我很抱歉迟到了,但这对我来说是 100% 的。 您只需在 picaso 中使用 imagPath 来加载图像并完成

String imagpath="";

 FirebaseStorage storageReference = FirebaseStorage.getInstance();

        DatabaseReference mDatabase = null;
        UploadTask uploadTask;
        StorageReference riversRef = storageReference.getReference();
        final StorageReference imagesRef = riversRef.child("images/Avatars/"+getSaltString()+filePathh.getLastPathSegment());
        uploadTask = imagesRef.putFile(filePathh);

// Register observers to listen for when the download is done or if it fails
        uploadTask.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) {
                // taskSnapshot.getMetadata() contains file metadata such as size, content-type, etc.
                // ...
                imagesRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        String content = uri.toString();
                        String result = content.substring(content.indexOf("%") + 1, content.indexOf("?"));
                        result = result.substring(2);
                        if (content.length() > 0) {

                            imagepath=content;

                        }
                    }
                });



                //update session image path


            }
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 2016-12-18
    • 2019-08-20
    • 2020-03-18
    • 2020-08-03
    • 1970-01-01
    相关资源
    最近更新 更多