从Firestore加载Picasso的图像未显示在Cardview中

时间:2019-06-05 20:06:47

标签: android firebase firebase-storage picasso

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

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

cardview布局

<?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中,但它们不可见。但是我知道它们正在加载到图像视图中,因为根据存储的图片数量加载了正确的cardviews数量,并且在单击imageview时,在吐司中显示了正确的url。如果还有其他需要补充的地方,请告诉我。任何帮助将不胜感激。

编辑:

我将.placeholder()添加到了毕加索,它现在显示了占位符,但是当我单击图像时,吐司仍然显示要存储的网址。

3 个答案:

答案 0 :(得分:0)

似乎毕加索将功能使用更改为获取 link 所以也许尝试像这样

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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