UIL装载精确的图像精确、图像、UIL

2023-09-06 15:01:02 作者:劝你善良

我有一个通用的图像加载另一个问题。尝试使用它在ListView和GridView用于显示大量图像。传递给UIL的URL包含高分辨率图像。我一直在使用几乎所有scaletypes尝试,它仍然加载图像远远低于原LazyList移动​​网络上。据我所知,第一次加载准确的图像,然后调整其大小。有没有办法下载量较小的数据,以显示这非常缩放后的图像。此外,它同时具有两种不同的例外是加载图像有时craches。 EOFException类和SocketTimeoutException。任何想法,我做错了什么?

更新:适配器类:

 公共类LazyAdapter延伸BaseAdapter {  私人活动活动; 私人列表<的String []>数据; 私有静态LayoutInflater吹气= NULL; 公共ImageLoade1r ImageLoader的; 公共布尔秀; 公共最后弦乐网=HTTP:// WWW; 公共DisplayImageOptions选择; 公共ImageLoader的诺斯特拉; 公共LazyAdapter(活动一,表<的String [] GT; D,布尔标志){ 活性=一个; 数据= D; 秀=标志; ImageLoaderConfiguration配置=新ImageLoaderConfiguration.Builder(a.getApplicationContext()) .enableLogging() .build(); 诺斯特拉= ImageLoader.getInstance(); nostra.init(配置); 选项​​=新DisplayImageOptions.Builder() .cacheOnDisc() .showImageOnFail(R.drawable.failed) .imageScaleType(ImageScaleType.EXACTLY) .bitmapConfig(Bitmap.Config.RGB_565) .build(); 吹气=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ImageLoader的=新ImageLoade1r(activity.getApplicationContext()); } 公众诠释的getCount(){ 返回data.size(); } 公共对象的getItem(INT位置){ 返回的位置; } 众长getItemId(INT位置){ 返回的位置; }  公共查看getView(INT位置,查看convertView,父母的ViewGroup){ 查看VI = convertView;  的String [] URL = data.get(位置); 如果(convertView == NULL) VI = inflater.inflate(R.layout.item,NULL); TextView的文本=(TextView的)vi.findViewById(R.id.text);; ImageView的图像=(ImageView的)vi.findViewById(R.id.image); 进度微调=(进度)vi.findViewById(R.id.prgrsItem); RelativeLayout的LAYO =(RelativeLayout的)vi.findViewById(R.id.thelayout); 如果(URL [1] .trim()。等于(文件夹)) { 字符串IMG =网+网址[3] .trim()+ URL [2] +头衔+JPG; 显示(图像,IMG,微调); text.setText(URL [2] .replaceAll(_,)); } 其他 { 串IMG; 如果(显示== true)而 JPGIMG =网+网址[3] +网址[2] +称号+; 其他 IMG =网+网址[0]; 显示(图像,IMG,微调); text.setText(URL [2] .replaceAll(_,)); } 如果(显示== true)而 { text.setVisibility(View.VISIBLE); } 其他 { text.setVisibility(View.GONE); } 返回VI; } 公共无效显示(ImageView的IMG,字符串URL,最终进度微调) { nostra.displayImage(URL,IMG,期权,新ImageLoadingListener(){ @覆盖 公共无效onLoadingStarted(字符串imageUri,查看视图){ spinner.setVisibility(View.VISIBLE); } @覆盖 公共无效onLoadingFailed(字符串imageUri,观景,FailReason failReason){ spinner.setVisibility(View.GONE); 。EasyTracker.getTracker()sendException(failReason.toString(),FALSE); } @覆盖 公共无效onLoadingComplete(字符串imageUri,观景,位图loadedImage){ spinner.setVisibility(View.GONE); } @覆盖 公共无效onLoadingCancelled(字符串imageUri,查看视图){  } }); }} 

更新 EOFException类:

  03-21 13:51:55.800:E / ImageLoader的(31605):空03-21 13:51:55.800:E / ImageLoader的(31605):java.io.EOFException03-21 13:51:55.800:E / ImageLoader的(31605):在libcore.io.Streams.readAsciiLine(Streams.java:203)03-21 13:51:55.800:E / ImageLoader的(31605):在libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:544)03-21 13:51:55.800:E / ImageLoader的(31605):在libcore.net.http.HttpEngine.readResponse(HttpEngine.java:784)03-21 13:51:55.800:E / ImageLoader的(31605):在libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)03-21 13:51:55.800:E / ImageLoader的(31605):在libcore.net.http.HttpURLConnectionImpl.getResponse code(HttpURLConnectionImpl.java:479)03-21 13:51:55.800:E / ImageLoader的(31605):在com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromNetwork(BaseImageDownloader.java:113)03-21 13:51:55.800:E / ImageLoader的(31605):在com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:84)03-21 13:51:55.800:E / ImageLoader的(31605):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.saveImageOnDisc(LoadAndDisplayImageTask.java:299)03-21 13:51:55.800:E / ImageLoader的(31605):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:237)03-21 13:51:55.800:E / ImageLoader的(31605):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:149)03-21 13:51:55.800:E / ImageLoader的(31605):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)03-21 13:51:55.800:E / ImageLoader的(31605):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)03-21 13:51:55.800:E / ImageLoader的(31605):在java.lang.Thread.run(Thread.java:856) 

解决方案 英190米巨型起重机倒塌 造价超300万

使用应该使用视图持有人的表现。

http://developer.android.com/training/improving-布局/平滑scrolling.html

您code可能的ListView的滚动,这会降低性能时经常致电findViewById()。即使当适配器返回回收充气视图,你仍然需要查找的元素和更新。各地重复使用findViewById()的方法是使用查看持有人的设计模式。

http://www.youtube.com/watch?v=wDBM6wVEO70 。主题是ABOT ListView和观点持有者。

在超时套接字读取或接受手术的过期SokectTimeOut异常。

  ImageLoaderConfiguration配置=新ImageLoaderConfiguration.Builder(a.getApplicationContext())    .enableLogging()    。建立();    .imageDownloader(新URLConnectionImageDownloader(5 * 1000,20 * 1000))// connectTimeout(5秒),readTimeout(20秒) 

有关EOFException类检查的链接。

的http:// code.google.com/p/libs-for-android/issues/detail?id=14 。

  System.setProperty(http.keepAlive,假)。 

发出类似有人提出一些建议打开HTTP URL连接前尝试以上。

大概有无关,与你的code。

I have another issue with Universal Image loader. Trying to use it in a listview and gridview for displaying large amount of images. The urls passed to UIL contain high res images. I have tried using almost all scaletypes, and it still loads images much slower on mobile network than Original LazyList. As I understand it first loads the exact image and then resizes it. Is there a way to download smaller amount of data to display this very much scaled image. Also it sometimes craches while loading images with two different exceptions. EOFException, and SocketTimeoutException. Any ideas what I am doing wrong here ?

Update: Adapter class:

public class LazyAdapter extends BaseAdapter {
    
    private Activity activity;
    private List<String[]> data;
    private static LayoutInflater inflater=null;
    public ImageLoade1r imageLoader; 
    public boolean show;
    public final String webs = "http://www";
    public DisplayImageOptions options;
    public ImageLoader nostra;
    public LazyAdapter(Activity a, List<String[]> d, boolean flag) {
        activity = a;
        data=d;
        show=flag;

        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a.getApplicationContext())
        .enableLogging()
        .build();

        nostra = ImageLoader.getInstance();
        nostra.init(config);

        options = new DisplayImageOptions.Builder()
        .cacheOnDisc()
        .showImageOnFail(R.drawable.failed)
        .imageScaleType(ImageScaleType.EXACTLY)
        .bitmapConfig(Bitmap.Config.RGB_565)
        .build();

        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoade1r(activity.getApplicationContext());
    }

    public int getCount() {
        return data.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;
        
        String[] url = data.get(position);
        if(convertView==null)
            vi = inflater.inflate(R.layout.item, null);

        TextView text=(TextView)vi.findViewById(R.id.text);;
        ImageView image=(ImageView)vi.findViewById(R.id.image);
        ProgressBar spinner = (ProgressBar) vi.findViewById(R.id.prgrsItem);
        RelativeLayout layo = (RelativeLayout) vi.findViewById(R.id.thelayout);
        if(url[1].trim().equals("folder"))
        {
         String img = webs+url[3].trim() + url[2] +"title"+".jpg";
         display(image, img, spinner);
         text.setText(url[2].replaceAll("_", " "));
        }
        else
        {
         String img;
         if(show==true)
          img = webs+url[3] + url[2]+"title"+".jpg";
         else
          img = webs+url[0];
         display(image, img, spinner);
         text.setText(url[2].replaceAll("_", " "));
        }
        if(show==true)
        {
         text.setVisibility(View.VISIBLE);
        }
        else
        {
         text.setVisibility(View.GONE);
        }
        return vi;
    }
    public void display(ImageView img, String url, final ProgressBar spinner)
    {
        nostra.displayImage(url, img, options, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
             spinner.setVisibility(View.VISIBLE);
            }
            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
             spinner.setVisibility(View.GONE);
             EasyTracker.getTracker().sendException(failReason.toString(), false);
            }
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
             spinner.setVisibility(View.GONE);
            }
            @Override
            public void onLoadingCancelled(String imageUri, View view) {
                
            }
    });
    }
}

Update EOFException:

03-21 13:51:55.800: E/ImageLoader(31605): null
03-21 13:51:55.800: E/ImageLoader(31605): java.io.EOFException
03-21 13:51:55.800: E/ImageLoader(31605):  at libcore.io.Streams.readAsciiLine(Streams.java:203)
03-21 13:51:55.800: E/ImageLoader(31605):  at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:544)
03-21 13:51:55.800: E/ImageLoader(31605):  at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:784)
03-21 13:51:55.800: E/ImageLoader(31605):  at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
03-21 13:51:55.800: E/ImageLoader(31605):  at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:479)
03-21 13:51:55.800: E/ImageLoader(31605):  at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromNetwork(BaseImageDownloader.java:113)
03-21 13:51:55.800: E/ImageLoader(31605):  at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:84)
03-21 13:51:55.800: E/ImageLoader(31605):  at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.saveImageOnDisc(LoadAndDisplayImageTask.java:299)
03-21 13:51:55.800: E/ImageLoader(31605):  at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:237)
03-21 13:51:55.800: E/ImageLoader(31605):  at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:149)
03-21 13:51:55.800: E/ImageLoader(31605):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
03-21 13:51:55.800: E/ImageLoader(31605):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
03-21 13:51:55.800: E/ImageLoader(31605):  at java.lang.Thread.run(Thread.java:856)

解决方案

Use should use a view holder for performance.

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

Your code might call findViewById() frequently during the scrolling of ListView, which can slow down performance. Even when the Adapter returns an inflated view for recycling, you still need to look up the elements and update them. A way around repeated use of findViewById() is to use the "view holder" design pattern.

http://www.youtube.com/watch?v=wDBM6wVEO70. The topic is abot listview and view holder.

SokectTimeOut Exception is thrown when a timeout expired on a socket read or accept operation.

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a.getApplicationContext())
    .enableLogging()
    .build();
    .imageDownloader(new URLConnectionImageDownloader(5 * 1000, 20 * 1000)) // connectTimeout (5 s), readTimeout (20 s)

For EOFException check the link.

http://code.google.com/p/libs-for-android/issues/detail?id=14.

  System.setProperty("http.keepAlive", "false"). 

Issue similar was raised and some suggested to try the above before opening HTTP url connection.

Probably has nothing to do with your code.