首页 > 解决方案 > 使用 Picasso、Glide、Image Loader、Universal Image Loader 加载图像失败

问题描述

我创建了印地语视频歌曲应用程序,但视频缩略图无法显示在视频列表中。(加载了单个图像,但无法加载多个图像阵列。)

使用多个图像加载器库但不加载图像:

在此处输入图像描述

滑行:

implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'


Glide .with(viewHolder.icon_1.getContext())
            .load(((AppModelicon) this.b.get(i)).getThumnail())
            .into(viewHolder.icon_1)  ;

Glide.with(MainActivity.this)
            .load("https://img.youtube.com/vi/EEX_XM6SxmY/mqdefault.jpg")
            .placeholder(R.drawable.ic_menu_camera)
            .error(R.drawable.ic_menu_gallery)
            .listener(new RequestListener<Drawable>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                    // log exception
                    Log.e("TAG", "Error loading image", e);
                    return false; // important to return false so the error placeholder can be placed
                }

                @Override
                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                    return false;
                }
            })
            .into(viewHolder.icon_1);

毕加索:

implementation 'com.squareup.picasso:picasso:2.+'

Picasso.get()
            .load("https://img.youtube.com/vi/EEX_XM6SxmY/mqdefault.jpg")
            .resize(50, 50)
            .centerCrop()
            .into(viewHolder.icon_1);

使用带有 glide 的请求管理器:

RequestManager requestManager = Glide.with(a)
            .applyDefaultRequestOptions(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.NONE))
            .applyDefaultRequestOptions(RequestOptions.placeholderOf(R.drawable.ic_menu_camera));
                requestManager
            .applyDefaultRequestOptions(RequestOptions.skipMemoryCacheOf(true));
                requestManager.load(pathToFile)
            .into(viewHolder.icon_1);

后台任务方法使用:

String pathToFile = this.b.get(i).getThumnail();
DownloadImageWithURLTask downloadTask = new DownloadImageWithURLTask(viewHolder.icon_1);
downloadTask.execute(pathToFile);

public class DownloadImageWithURLTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageWithURLTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String pathToFile = urls[0];
        Bitmap bitmap = null;
        try {
            InputStream in = new java.net.URL(pathToFile).openStream();
            bitmap = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return bitmap;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

请帮助我如何解决这个问题。

标签: androidandroid-asynctaskpicassoandroid-glideuniversal-image-loader

解决方案


如果您在 recyclerview 中加载图像,下面的代码可能会帮助您。

@Override
public void onBindViewHolder(final ViewHolder holder, int position)
{
    Glide.with(this.context)
            .load(urls.get(position))
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(holder.getImage());
}

有关更完整的教程,您可以访问https://ledron.github.io/RecyclerView/


推荐阅读