出使用通用图像装载机内存错误和图像得到刷新 [英] Out Of memory error using Universal Image Loader and images getting refreshed

查看:111
本文介绍了出使用通用图像装载机内存错误和图像得到刷新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是通用的图像加载器显示但是我得到了内存不足的错误,当我滚动列表比新观点是有第一个视图的图像时的名单并没有在ListView中的图像,缩略图滚动阶段但比图像获取设置为它应该是合适的图像。

 公共类NewAdapter扩展了BaseAdapter {

    私人活动的活动;
    私人的ArrayList<字符串> movieThumbnail;
    私人的ArrayList<字符串> movieText;
    私有静态LayoutInflater吹气= NULL;
    静态文件cacheDir;

    ImageLoaderConfiguration配置=新ImageLoaderConfiguration.Builder(活动)
    .memoryCache(新WeakMemoryCache())
    .denyCacheImageMultipleSizesInMemory()
    .discCache(新UnlimitedDiscCache(cacheDir))
    .threadPoolSize(5)
    .imageDownloader(新URLConnectionImageDownloader(120 * 1000,120 * 1000))
    .enableLogging()
    。建立();

    DisplayImageOptions选项=新DisplayImageOptions.Builder()
    .cacheOnDisc()
    .cacheInMemory()
    .bitmapConfig(Bitmap.Config.RGB_565)
    .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
    。建立();

    私人ImageLoader的ImageLoader的= ImageLoader.getInstance();

    公共NewAdapter(活动一,ArrayList的<字符串> movieThumbnail,ArrayList的<字符串> movieText){
        活性= A;
        / *数据= D; * /
        this.movi​​eThumbnail = movieThumbnail;
        this.movi​​eText = movieText;
        充气=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        如果(android.os.Environment.getExternalStorageState()。等于(android.os.Environment.MEDIA_MOUNTED))
            cacheDir =新的文件(android.os.Environment.getExternalStorageDirectory(),JunkFolder);
        其他
            cacheDir = activity.getCacheDir();
        如果(!cacheDir.exists())
            cacheDir.mkdirs();

        imageLoader.init(配置);

    }

    公众诠释getCount将(){
        返回movieText.size();
    }

    公共对象的getItem(INT位置){
        返回的位置;
    }

    众长getItemId(INT位置){
        返回的位置;
    }

    公共查看getView(INT位置,查看convertView,ViewGroup中父){
        查看VI = convertView;
        如果(convertView == NULL)
              VI = inflater.inflate(R.layout.listrow,NULL);

        TextView的文字=(TextView的)vi.findViewById(R.id.rowListTextView);
        ImageView的形象=(ImageView的)vi.findViewById(R.id.movi​​eImage);
        text.setText(movieText.get(位置));
        imageLoader.displayImage(movieThumbnail.get(位置),图像,选项);
        返回六;
    }
}
 

和这里是XML格式布局的ImageView和TextView的

 < RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID / text_relativelayout
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>

    < ImageView的
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:背景=@可绘制/ latest_list_toggle/>


    < ImageView的
        机器人:ID =@ + ID / movieImage
        机器人:layout_width =40dp
        机器人:layout_height =40dp
        机器人:layout_marginLeft =12dp
        机器人:layout_marginTop =14dp/>

    <的TextView
        机器人:ID =@ + ID / rowListTextView
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_toRightOf =@ + ID / movieImage
        机器人:paddingBottom会=10dp
        机器人:以下属性来=10dp
        机器人:paddingRight =21dp
        机器人:paddingTop =20dp
        机器人:文本=@字符串/ APP_NAME
        机器人:文字颜色=@机器人:彩色/黑白
        机器人:TEXTSIZE =17sp
        机器人:TEXTSTYLE =黑体/>
< / RelativeLayout的>
 

解决方案

设置 .resetViewBeforeLoading()在DisplayImageOptions。

I am using the universal image loader to display the images as thumbnail in ListView however i am getting the out of memory error and when i scroll the list than the new view is having the images of first view when the list was not on scroll stage but than the images gets set to proper image which it should be.

public class NewAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<String> movieThumbnail;
    private ArrayList<String> movieText;
    private static LayoutInflater inflater=null;
    static File cacheDir;

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(activity)
    .memoryCache(new WeakMemoryCache())
    .denyCacheImageMultipleSizesInMemory()
    .discCache(new UnlimitedDiscCache(cacheDir))
    .threadPoolSize(5)
    .imageDownloader(new URLConnectionImageDownloader(120 * 1000, 120 * 1000))
    .enableLogging()
    .build();

    DisplayImageOptions options = new DisplayImageOptions.Builder()
    .cacheOnDisc()
    .cacheInMemory()
    .bitmapConfig(Bitmap.Config.RGB_565)
    .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
    .build();

    private ImageLoader imageLoader= ImageLoader.getInstance();

    public NewAdapter(Activity a, ArrayList<String> movieThumbnail, ArrayList<String> movieText) {
        activity = a;
        /*data=d;*/
        this.movieThumbnail = movieThumbnail;
        this.movieText = movieText;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
            cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"JunkFolder");
        else
            cacheDir=activity.getCacheDir();
        if(!cacheDir.exists())
            cacheDir.mkdirs();

        imageLoader.init(config);

    }

    public int getCount() {
        return movieText.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
              vi = inflater.inflate(R.layout.listrow, null);

        TextView text=(TextView)vi.findViewById(R.id.rowListTextView);
        ImageView image=(ImageView)vi.findViewById(R.id.movieImage);
        text.setText(movieText.get(position));
        imageLoader.displayImage(movieThumbnail.get(position), image, options);
        return vi;
    }
}

and here is Xml Layout for ImageView and TextView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text_relativelayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/latest_list_toggle" />


    <ImageView
        android:id="@+id/movieImage"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_marginLeft="12dp"
        android:layout_marginTop="14dp" />

    <TextView
        android:id="@+id/rowListTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/movieImage"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        android:paddingRight="21dp"
        android:paddingTop="20dp"
        android:text="@string/app_name"
        android:textColor="@android:color/black"
        android:textSize="17sp"
        android:textStyle="bold" />
</RelativeLayout>

解决方案

Set .resetViewBeforeLoading() in DisplayImageOptions.

这篇关于出使用通用图像装载机内存错误和图像得到刷新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆