【问题标题】:Image load fail using Picasso,Glide,Image Loader ,Universal Image Loader使用 Picasso、Glide、Image Loader、Universal Image Loader 加载图像失败
【发布时间】:2020-03-24 17:45:45
【问题描述】:

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

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

滑翔:

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

请帮我解决这个问题。

【问题讨论】:

  • 能否请您分享屏幕截图以及您的音乐和图片托管在哪里?
  • @VinayJayaram 请检查图片。
  • 你试过其他图片吗(也许是imgur)?或者你有互联网许可吗?
  • @Wesely 其他图像工作,我也给予互联网许可。
  • @AshishVirani 图片在哪里托管?

标签: android android-asynctask picasso android-glide universal-image-loader


【解决方案1】:

如果您在 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/

【讨论】:

    【解决方案2】:

    我可以使用 glide 加载您的图片网址:

    implementation 'com.github.bumptech.glide:glide:4.9.0'
    
    Glide.with(this@MainActivity)
                    .load("https://img.youtube.com/vi/EEX_XM6SxmY/mqdefault.jpg")
                    .placeholder(R.mipmap.ic_launcher)
                    .error(R.mipmap.ic_launcher)
                    .into(imageView)
    

    【讨论】:

    • 活动单张图片已加载,但适配器内部多张图片未加载。
    • 你的视图持有者和图像视图不为空吗?
    • 在适配器中的 Glide 中传递活动上下文而不是 viewholder imageview 上下文
    • 尝试在适配器中添加静态 url。检查上下文和 imageview 在你的 Glide inside 适配器中不为空,它应该在 onBindViewHolder
    • 静态图片 url 有效,但使用 arraylist 加载图片 url 无效。
    【解决方案3】:

    删除下面的依赖行

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

    【讨论】:

      【解决方案4】:

      不要将 MainActivity.this 作为上下文传递,它总是错误的..

      试试这个

      //in activity
      Glide.with(this) 
             .load("https://pbs.twimg.com/profile_images/1123379185764917248/On9ZnfVh.png")
             .into(imageView)
      
      //in Fragments
      Glide.with(view.context)
        .load("url")
        .into(imageView)
      

      用你自己的替换 .load("url") 和 "imageView"。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-11
        • 2013-11-28
        • 2014-05-19
        • 2013-10-17
        • 1970-01-01
        • 2019-01-13
        相关资源
        最近更新 更多