使用 Picasso 从 firestore 加载的图像未显示在 cardview 中
Images loaded from firestore with Picasso not showing in cardview
我正在使用来自 Firebase 的 Picasso 将图像加载到 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 存储中的图像能够加载到我的 cardView 中,但它们不可见。但是我知道它们正在加载到图像视图中,因为根据存储中的图片数量加载了正确数量的卡片视图,并且当单击图像视图时,吐司中显示了正确的 urls。如果还有什么我应该补充的,请告诉我。任何帮助将不胜感激。
编辑:
我将 .placeholder() 添加到 Picasso,它现在显示占位符,但是当我单击图像时,toast 仍然显示 url 到存储。
毕加索似乎将函数 with 更改为 get link
所以也许试试这样的东西
Picasso.get()
.load(imageURL)
.placeholder(some place holder image)
.fit()
.into(imageView);
由于Android P,需要网络安全配置来处理所有http请求,也许与此有关。您可以查看 this solutions
我发现了我遇到的问题。原来我发给 Picasso 的 link 不是我要找的那个。以下问题最能描述我的问题:。不过,感谢 Dor 提供的正确使用 Picasso 的帮助。
我正在使用来自 Firebase 的 Picasso 将图像加载到 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 存储中的图像能够加载到我的 cardView 中,但它们不可见。但是我知道它们正在加载到图像视图中,因为根据存储中的图片数量加载了正确数量的卡片视图,并且当单击图像视图时,吐司中显示了正确的 urls。如果还有什么我应该补充的,请告诉我。任何帮助将不胜感激。
编辑:
我将 .placeholder() 添加到 Picasso,它现在显示占位符,但是当我单击图像时,toast 仍然显示 url 到存储。
毕加索似乎将函数 with 更改为 get link 所以也许试试这样的东西
Picasso.get()
.load(imageURL)
.placeholder(some place holder image)
.fit()
.into(imageView);
由于Android P,需要网络安全配置来处理所有http请求,也许与此有关。您可以查看 this solutions
我发现了我遇到的问题。原来我发给 Picasso 的 link 不是我要找的那个。以下问题最能描述我的问题: