2016-05-03 25 views
1

Ich benutze Universal Image Loader 1.9.5, um Bild von URL zu laden.
dies AdapterAndroid Universal Image Loader nicht genügend Speicher Fehler

public class BinderDataImg extends BaseAdapter { 

static final String KEY_IMG = "img"; 
LayoutInflater inflater; 
List<HashMap<String,String>> imgHashmap; 
ViewHolder holder; 

ImageLoader imageLoader = ImageLoader.getInstance(); 

public BinderDataImg(Activity act, List<HashMap<String,String>> map) { 
    this.imgHashmap = map; 
    inflater = (LayoutInflater) act 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

public int getCount() { 
    // TODO Auto-generated method stub 
    return imgHashmap.size(); 
} 

public Object getItem(int arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.list_img, null); 
     holder = new ViewHolder(); 
     holder.iv_img =(ImageView)vi.findViewById(R.id.imageViewImg); 

     vi.setTag(holder); 
    } 
    else{ 

     holder = (ViewHolder)vi.getTag(); 
    } 

    String uri = imgHashmap .get(position).get(KEY_IMG); 

    imageLoader.displayImage(uri, holder.iv_img); 

    return vi; 
} 

static class ViewHolder{ 
    ImageView iv_img; 
} 

}

dies Aktivität mit Config von Universal-Image loader

public class ActImg extends AppCompatActivity { 

static final String KEY_IMG = "img"; 
List<HashMap<String,String>> imgHashmap; 

List<ClassImg> imgList = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_act_img); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() 
      .cacheInMemory(true) 
      .cacheOnDisk(true) 
      .imageScaleType(ImageScaleType.EXACTLY) 
      .bitmapConfig(Bitmap.Config.RGB_565) 
      .resetViewBeforeLoading(true) 
      .displayer(new FadeInBitmapDisplayer(300)) 
      .showImageOnLoading(R.drawable.img_loading) 
      .build(); 

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

    Intent i = getIntent(); 

    CustomListView lvi = (CustomListView)findViewById(R.id.listViewImg); 

    try { 
     XmlPullParserImg parser = new XmlPullParserImg(); 
     imgList = parser.parse(getAssets().open(file)); 
     BinderDataImg binderdata = new BinderDataImg(this, imgHashmap); 
     lvi.setAdapter(binderdata); 

    }catch(IOException e) { 
     e.printStackTrace(); 
    } 

} 

Update: diese logcat ist
März 5-3: 50: 38,011 18383- 18878/tttdigital.readmangaonline E/ImageLoader: null
java.lang.OutOfMemoryError
bei android.graphics.Bitmap.nativeCre ate (native Methode)
bei android.graphics.Bitmap.createBitmap (Bitmap.java:689)
bei android.graphics.Bitmap.createBitmap (Bitmap.java:666)
bei android.graphics.Bitmap.createBitmap (Bitmap.java:599)
bei com.nostra13.universalimageloader.core.decode.BaseImageDecoder.considerExactScaleAndOrientatiton (BaseImageDecoder.java:218)
bei com.nostra13.universalimageloader.core.decode.BaseImageDecoder.decode (BaseImageDecoder.java: 91)
bei com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.decodeImage (LoadAndDisplayImageTask.java:265)
bei com.nostra13.universalimageloader.core.LoadAndDisplayImageTas k.tryLoadBitmap (LoadAndDisplayImageTask.java:238)
bei com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run (LoadAndDisplayImageTask.java:136)
bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1080)
bei java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:573)
bei java.lang.Thread.run (Thread.java:856)

I Bild von uRL laden, aber einige Bilder können nicht angezeigt werden und ich bekomme einen OutOfMemory Fehler.
wie es zu beheben?

+0

fügen Sie bitte logcat – USKMobility

+0

http://stackoverflow.com/questions/17211154/universal-image-loader-uil-n ostra-out-of-memory-error – USKMobility

+0

@USKMobility: Ich war Update in meinem Beitrag – abcd1234

Antwort

0

gibt es ein paar Möglichkeiten, wie Sie dies tun können,

1) Ihre Speicher-Cache-Größe unter Beispiel erhöhen setzt es auf 15

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPoolSize(3) 
      .threadPriority(Thread.MIN_PRIORITY + 3) 
      .denyCacheImageMultipleSizesInMemory() 
      .memoryCacheSize(1048576 * 15)    
      .discCache(new UnlimitedDiscCache(cacheDir)) 
      .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) 
      .build(); 

2) Reduzieren Sie Thread-Pool Größe ich habe 3 unter

verwendet
ImageLoaderConfiguration.Builder(context).threadPoolSize(3) 
statt ARGB_8888 Verwendung RGB_565

.bitmapConfig(Bitmap.Config.RGB_565) 

Auch 10

3) Auch diese Einstellung versuchen, wie dies in glide funktioniert im Allgemeinen SielargeHeap=truein Manifest-Datei verwenden können, wenn Sie es zu tun Laden Sie eine große Reihe von Bildern in Ihrer App

+0

mit largeHeap = true, es für wie viele API verwenden? oder irgendeine API kann es benutzen? – abcd1234

+0

Nein, es gibt keine min-Version für die es alle Version von Android –

+0

unterstützen wird es in Ordnung für den Speicher des Geräts? – abcd1234