【问题标题】:Imageloader always display the wrong pictureImageloader总是显示错误的图片
【发布时间】:2016-03-31 11:00:15
【问题描述】:

我正在开发一个安卓应用。我使用ImageLoader从服务加载图片。代码如下:

    public ImageLoader imageLoader = ImageLoader.getInstance();
    imageLoader.init(ImageLoaderConfiguration.createDefault(.this));
    options = new DisplayImageOptions.Builder().showStubImage(R.drawable.ic_stub).showImageForEmptyUri(R.drawable.ic_empty).showImageOnFail(R.drawable.ic_error).cacheInMemory(true).cacheOnDisc(true).displayer(new RoundedBitmapDisplayer(5)).build();
    imageLoader.displayImage(my_pic, holder.head, options);

我在活动中的getView() 中使用了此代码。我可以从服务中读取图片,但 holder.head 始终显示图片R.drawable.ic_stub。 在此代码之前,我还使用ImageLoader 在函数onCreate() 中显示图片,并且它工作得很好,它们在同一个文件中。

为什么我不能显示正确的图片?

【问题讨论】:

  • 您在设置要加载的图像时似乎存在逻辑问题。

标签: android universal-image-loader


【解决方案1】:

像这样使用图像加载器..... 首先初始化

 DisplayImageOptions defaultOptions;
    ImageLoaderConfiguration config;

              // OnCreate{
                defaultOptions = new DisplayImageOptions.Builder()
                        .cacheOnDisc(true).cacheInMemory(true)
                        .imageScaleType(ImageScaleType.EXACTLY).
                                showImageOnFail(R.drawable.noimage).showImageForEmptyUri(R.drawable.noimage).
                                showImageOnLoading(R.drawable.noimage)
                        .displayer(new FadeInBitmapDisplayer(300)).build();

                config = new ImageLoaderConfiguration.Builder(
                        getApplicationContext())
                        .defaultDisplayImageOptions(defaultOptions)
                        .memoryCache(new WeakMemoryCache())
                        .discCacheSize(100 * 1024 * 1024).build();

                ImageLoader.getInstance().init(config);

}

公共类 SubCatAdapter 扩展 BaseAdapter {

.....
private ImageLoader imageLoader;

public SubCatAdapter(Context mcontext, ArrayList<SubCategoriesVO> itmes) {
    this.mcontext = mcontext;
    ....
    imageLoader = imageLoader.getInstance();
}

....
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    Holder holder;
    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater) mcontext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.subcat_list_item, null);

        holder = new Holder();
        holder.imgIcon = (ImageView) convertView.findViewById(R.id.dd_icon);
        .....

        convertView.setTag(holder);
    } else {
        holder = (Holder) convertView.getTag();
    }

    SubCategoriesVO item = searched_itmes.get(position);

    if (imageLoader != null)
        imageLoader.displayImage(item.getImg(), holder.imgIcon);
   ....
    return convertView;
}}

添加访问互联网的权限

 <uses-permission android:name="android.permission.INTERNET" />

【讨论】:

  • 你应该从你的答案中删除你的个人代码!
  • 在您的代码中,您没有使用 imageLoader.displayImage(item.getImg(), holder.imgIcon); 中的选项
  • 你必须在应用启动时初始化一次。
  • @SohailZahid 我已经初始化了,但是还是不行。还是谢谢你的回答。
  • @EricCheng 你是否在清单中添加了互联网权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多