无法使用滑行在 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 中