Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法使用glide在recyclerView中显示图像_Android_Android Glide - Fatal编程技术网

Android 无法使用glide在recyclerView中显示图像

Android 无法使用glide在recyclerView中显示图像,android,android-glide,Android,Android Glide,图像不显示在回收器视图中 我正在使用glide在回收器视图中显示图像 我有一个图像url列表,并在适配器中传递该列表。我在另一个活动中使用了非常类似的方法,它在那里起作用。。。但它在这项活动中不起作用 AnimeActivity.java public class AnimeActivity extends AppCompatActivity { RecyclerView rv; List<String> adsImagesData = new ArrayList<>

图像不显示在回收器视图中

我正在使用glide在回收器视图中显示图像

我有一个图像url列表,并在适配器中传递该列表。我在另一个活动中使用了非常类似的方法,它在那里起作用。。。但它在这项活动中不起作用

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));

}
}
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);
    }
}
}
public class AnimeActivity扩展了appcompativity{
回收视图rv;
List adsImagesData=newarraylist();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_anime);
rv=findViewById(R.id.ads\U recyclerview);
rv.setLayoutManager(新直线布局经理(本));
getSupportActionBar().hide();
adsImagesData.add(“http://cdn.playbuzz.com/cdn/62b7af36-65b7-41aa-8db2-e34fd8a76acf/62c5efd3-fa55-464b-8ee5-9a3e2543c830.jpg");
rv.设置适配器(新的ADRECELERVIEWADAPTER(本,adsImagesData));
}
}
adRecycleServiceAdapter.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));

}
}
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);
    }
}
}
public类adrecycleveriewadapter扩展了RecyclerView.Adapter{
私有上下文;
私有列表数据;
公共地址服务适配器(上下文mContext,列表mData){
this.mContext=mContext;
this.mData=mData;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图;
LayoutInflater LayoutInflater=LayoutInflater.from(mContext);
视图=布局更平坦。充气(R.layout.ad\u行\u项,父项,false);
返回新的MyViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder,int位置){
使用(holder.adImg.getContext()).load(mData.get(position)).into(holder.adImg));
}
@凌驾
public int getItemCount(){
返回mData.size();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
图像视图adImg;
公共MyViewHolder(@NonNull View itemView){
超级(项目视图);
adImg=itemView.findviewbyd(R.id.ad\u图像\u视图);
}
}
}
尝试使用

RequestManager requestManager = Glide.with(mContext); 
RequestBuilder requestBuilder = requestManager.load(mData.get(position));         
requestBuilder.into(holder.adImg); 

我运行您的代码并尝试使用毕加索和格莱德,结果与您描述的相同,但当我在列表中添加另一个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");
当第一个图像要下载时,滑动它通过错误

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);
在清单文件的应用程序标记中添加此行 在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>

cdn.playbusz.com
从Android 9(API级别28)开始,默认情况下禁用明文支持。


在此之后,这两个图像都会按照您的需要显示在recyclerview中

以供测试用例使用https
adsImagesData.add(“https://
执行了,但仍然不工作。使用了另一个url,但仍然..我的代码是否完美?
@Override public int getItemCount(){return mData.size();}
是否执行此操作,仍然存在问题exists@IntelliJAmiya是的,它成功了..谢谢..把它放在答案中。我会验证这个。你能解释一下吗?请解释一下吗?但我用不同的URL检查了它..当我实现@IntelliJ Amiya代码时。甚至那个图像(有问题的)也显示在android 10上的RecycleServiceCheck中