无法使用滑行在 recyclerView 中显示图像
Unable to show image in recyclerView using glide
图片未显示在回收站视图中。
我正在使用 glide 在回收站视图中显示图像
我有一个图像列表 url 并将该列表传递给适配器。我在另一个 activity 中使用的方法非常相似,它在那里工作......但它在这个 activity.
中不起作用
AnimeActivity.java
public class AnimeActivity extends AppCompatActivity {
RecyclerView rv;
List<String> adsImagesData = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_anime);
rv = findViewById(R.id.ads_recyclerview);
rv.setLayoutManager(new LinearLayoutManager(this));
getSupportActionBar().hide();
adsImagesData.add("http://cdn.playbuzz.com/cdn/62b7af36-65b7-41aa-8db2-e34fd8a76acf/62c5efd3-fa55-464b-8ee5-9a3e2543c830.jpg");
rv.setAdapter(new AdRecyclerViewAdapter(this , adsImagesData));
}
}
AdRecyclerViewAdapter.java
public class AdRecyclerViewAdapter extends RecyclerView.Adapter<AdRecyclerViewAdapter.MyViewHolder> {
private Context mContext;
private List<String> mData;
public AdRecyclerViewAdapter(Context mContext, List<String> mData) {
this.mContext = mContext;
this.mData = mData;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
view = layoutInflater.inflate(R.layout.ad_row_item , parent , false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Glide.with(holder.adImg.getContext()).load(mData.get(position)).into(holder.adImg);
}
@Override
public int getItemCount() {
return mData.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageView adImg;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
adImg = itemView.findViewById(R.id.ad_image_view);
}
}
}
试试
RequestManager requestManager = Glide.with(mContext);
RequestBuilder requestBuilder = requestManager.load(mData.get(position));
requestBuilder.into(holder.adImg);
我 运行 你的代码并尝试使用 picasso 和 glide,结果与你描述的相同,但是当我在列表中添加另一个 url 时,其他图像在 recyclerview 中成功显示为
adsImagesData.add("http://cdn.playbuzz.com/cdn/62b7af36-65b7-41aa-8db2-e34fd8a76acf/62c5efd3-fa55-464b-8ee5-9a3e2543c830.jpg");
adsImagesData.add("https://lh3.googleusercontent.com/Kf1Bc7wkQtEkbdinSLJhGBNwIjm7R_fe4unmPXHO7bMwg_zArmRhgenhs7nNhb5pp6KJ=s180-rw");
当第一张图片下载时滑行通过错误 as
E/Glide: GlideExceptioncom.bumptech.glide.load.engine.GlideException: Failed to load resource
There was 1 cause:
java.io.IOException(Cleartext HTTP traffic to cdn.playbuzz.com not permitted)
表示此网站不允许以这种方式下载图片
我用这个方法检查这个错误
Glide.with(holder.adImg.getContext())
.load(mData.get(position))
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
Log.e("Glide", "GlideException"+e);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
.into(holder.adImg);
你必须使用这个方法
android:networkSecurityConfig="@xml/network_security_config"
在清单文件的应用程序标签中添加这一行
在 xml 目录中的资源中创建布局为
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">cdn.playbuzz.com</domain>
</domain-config>
</network-security-config>
从 Android 9(API 级别 28)开始,默认禁用明文支持。
check this link
在此之后,两张图片都会根据需要显示在 recyclerview 中
图片未显示在回收站视图中。
我正在使用 glide 在回收站视图中显示图像
我有一个图像列表 url 并将该列表传递给适配器。我在另一个 activity 中使用的方法非常相似,它在那里工作......但它在这个 activity.
中不起作用AnimeActivity.java
public class AnimeActivity extends AppCompatActivity {
RecyclerView rv;
List<String> adsImagesData = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_anime);
rv = findViewById(R.id.ads_recyclerview);
rv.setLayoutManager(new LinearLayoutManager(this));
getSupportActionBar().hide();
adsImagesData.add("http://cdn.playbuzz.com/cdn/62b7af36-65b7-41aa-8db2-e34fd8a76acf/62c5efd3-fa55-464b-8ee5-9a3e2543c830.jpg");
rv.setAdapter(new AdRecyclerViewAdapter(this , adsImagesData));
}
}
AdRecyclerViewAdapter.java
public class AdRecyclerViewAdapter extends RecyclerView.Adapter<AdRecyclerViewAdapter.MyViewHolder> {
private Context mContext;
private List<String> mData;
public AdRecyclerViewAdapter(Context mContext, List<String> mData) {
this.mContext = mContext;
this.mData = mData;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
view = layoutInflater.inflate(R.layout.ad_row_item , parent , false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Glide.with(holder.adImg.getContext()).load(mData.get(position)).into(holder.adImg);
}
@Override
public int getItemCount() {
return mData.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageView adImg;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
adImg = itemView.findViewById(R.id.ad_image_view);
}
}
}
试试
RequestManager requestManager = Glide.with(mContext);
RequestBuilder requestBuilder = requestManager.load(mData.get(position));
requestBuilder.into(holder.adImg);
我 运行 你的代码并尝试使用 picasso 和 glide,结果与你描述的相同,但是当我在列表中添加另一个 url 时,其他图像在 recyclerview 中成功显示为
adsImagesData.add("http://cdn.playbuzz.com/cdn/62b7af36-65b7-41aa-8db2-e34fd8a76acf/62c5efd3-fa55-464b-8ee5-9a3e2543c830.jpg");
adsImagesData.add("https://lh3.googleusercontent.com/Kf1Bc7wkQtEkbdinSLJhGBNwIjm7R_fe4unmPXHO7bMwg_zArmRhgenhs7nNhb5pp6KJ=s180-rw");
当第一张图片下载时滑行通过错误 as
E/Glide: GlideExceptioncom.bumptech.glide.load.engine.GlideException: Failed to load resource
There was 1 cause:
java.io.IOException(Cleartext HTTP traffic to cdn.playbuzz.com not permitted)
表示此网站不允许以这种方式下载图片
我用这个方法检查这个错误
Glide.with(holder.adImg.getContext())
.load(mData.get(position))
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
Log.e("Glide", "GlideException"+e);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
.into(holder.adImg);
你必须使用这个方法
android:networkSecurityConfig="@xml/network_security_config"
在清单文件的应用程序标签中添加这一行 在 xml 目录中的资源中创建布局为
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">cdn.playbuzz.com</domain>
</domain-config>
</network-security-config>
从 Android 9(API 级别 28)开始,默认禁用明文支持。 check this link
在此之后,两张图片都会根据需要显示在 recyclerview 中