【问题标题】:Images loaded from firestore with Picasso not showing in cardview从 Firestore 加载的图像与 Picasso 未显示在卡片视图中
【发布时间】:2019-10-21 08:45:31
【问题描述】:

我正在使用 Firebase 中的 Picasso 将图像加载到 CardView 中,但图像没有显示

我正在关注本指南:How to display data from Firestore in a RecyclerView with Android?。但是图像仍然不可见。

卡片视图布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_marginVertical="8dp"
    app:cardCornerRadius="6dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imageCardView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="fitCenter"
            android:contentDescription="@string/user_image" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="4dp"
            android:textAlignment="center"
            android:textColor="#fff"
            android:textSize="20sp" />

    </LinearLayout>

</android.support.v7.widget.CardView>

我正在使用的适配器

adapter = new FirestoreRecyclerAdapter<Post, PostViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull PostViewHolder postViewHolder, int position, @NonNull Post post) {
                postViewHolder.setPostImage(post.getImageUrl_1());
            }

            @NonNull
            @Override
            public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.card_view_layout, parent, false);
                return new PostViewHolder(view);
            }
        };
        recyclerView.setAdapter(adapter);

加载图片的代码。

void setPostImage(final String imageURL) {
    ImageView imageView = view.findViewById(R.id.imageCardView);
    //imageView.setImageBitmap(getBitmapFromURL(imageURL));
    Picasso.with(view.getContext())
           .load(imageURL)
           .into(imageView);
    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(view.getContext(), imageURL, Toast.LENGTH_SHORT).show();
        }
    });
}

我希望我的 Firebase 存储中的图像会加载到我的 cardViews 中,但它们不可见。但是我知道它们正在加载到图像视图中,因为根据存储中的图片数量正在加载正确数量的卡片视图,并且当单击图像视图时,吐司中会显示正确的 URL。如果还有什么我应该补充的,请告诉我。任何帮助将不胜感激。

编辑:

我将 .placeholder() 添加到 Picasso,它现在显示占位符,但是当我单击图像时,toast 仍然显示要存储的 url。

【问题讨论】:

  • 你试过用 Glide 代替 Picasso 吗?可以为 R.layout.card_view_layout 添加代码吗?
  • 我曾尝试使用 Glide 获得类似的结果
  • 可以为 PostViewHolder 添加代码吗?你在哪里以及如何调用 setPostImage()?
  • setPostImage() 在 PostViewHolder 中被调用,这就是除了构造函数和变量之外的所有内容

标签: android firebase firebase-storage picasso


【解决方案1】:

我发现了我遇到的问题。原来我发送给毕加索的链接不是我要找的。以下问题最能描述我的问题:How to get URL from Firebase Storage getDownloadURL。不过,感谢 Dor 提供正确使用 Picasso 的帮助。

【讨论】:

  • 非常感谢,遇到了同样的问题。 (我已经关注了你的链接并且它有效)我还删除了recyclerview.hasfixedsize(true))
【解决方案2】:

好像毕加索把函数 with 改成了 get link 所以也许尝试这样的事情

Picasso.get()
    .load(imageURL)
    .placeholder(some place holder image)
    .fit()
    .into(imageView);

【讨论】:

  • 感谢您的回答,但我收到错误“无法解析方法 'get()'”
  • 你用的是什么版本的毕加索?最新的是毕加索:2.71828 可以在这里看到:github.com/square/picasso
  • 我正在使用 2.71828 get() 现在可以工作,但我遇到了同样的错误。
  • 您遇到什么错误?过去我在 getView 中使用它,它对我有用
  • 我的错误,我没有收到错误,但是我仍然看不到我的图像。 getView 是什么意思?
【解决方案3】:

从 Android P 开始,需要网络安全配置来处理所有 http 请求,也许与此有关。可以查看this solutions

【讨论】:

  • 感谢您的评论,但这并没有解决问题。
猜你喜欢
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2018-07-06
  • 2017-08-02
  • 1970-01-01
  • 2020-01-09
相关资源
最近更新 更多