Main exercises for asynchronous tasks and Lrccache caching
Packagecom.android.test;ImportJava.io.InputStream;Importjava.net.HttpURLConnection;ImportJava.net.URL;ImportCom.nostra13.universalimageloader.core.ImageLoader;Importcom.nostra13.universalimageloader.core.ImageLoaderConfiguration;ImportCom.nostra13.universalimageloader.core.assist.FailReason;ImportCom.nostra13.universalimageloader.core.listener.ImageLoadingListener;Importandroid.app.Activity;ImportAndroid.graphics.Bitmap;Importandroid.graphics.BitmapFactory;Importandroid.graphics.drawable.BitmapDrawable;ImportAndroid.os.AsyncTask;ImportAndroid.os.Bundle;ImportAndroid.support.v4.util.LruCache;ImportAndroid.view.View;ImportAndroid.view.ViewGroup;ImportAndroid.widget.BaseAdapter;ImportAndroid.widget.ImageView;ImportAndroid.widget.ListAdapter;ImportAndroid.widget.ListView;ImportAndroid.widget.TextView; Public classMainactivityextendsActivity {PrivateListView lv_images; @Overrideprotected voidonCreate (Bundle savedinstancestate) {Super. OnCreate (savedinstancestate); Setcontentview (R.layout.activity_main); Lv_images=(ListView) Findviewbyid (r.id.lv_images); Imageloaderconfiguration Configuration=imageloaderconfiguration.createdefault ( This); Imageloader.getinstance (). init (configuration); ListAdapter Adapter=NewImageadapter (); Lv_images.setadapter (adapter); } /*** Adapter *@authorTaoshihan **/ classImageadapterextendsBaseadapter {PrivateLrucache<string, bitmapdrawable>Mimagecache; PublicImageadapter () {intMaxsize= (int) (Runtime.getruntime (). MaxMemory ()/8); Mimagecache=NewLrucache<string, bitmapdrawable>(maxSize) {protected intsizeOf (String key, Bitmapdrawable drawable) {returnDrawable.getbitmap (). GetByteCount (); }; }; } @Override PublicView GetView (intposition, View Convertview, ViewGroup parent) {String URL=(String) getItem (position); View view; if(convertview!=NULL) {View=Convertview; }Else{View=view.inflate (Getapplicationcontext (), R.layout.image_item,NULL); } ImageView ImageView=(ImageView) View.findviewbyid (r.id.tv_image); Bitmapdrawable bitmapdrawable=getbitmapfrommemorycache (URL); if(bitmapdrawable!=NULL){ //Reading Cached Picturesimageview.setimagedrawable (bitmapdrawable); }Else{ //Read Network picturesImageworkertask task=NewImageworkertask (ImageView); Task.execute (URL); } returnview; } /*** Read pictures from the cache *@paramKey *@return */ Publicbitmapdrawable Getbitmapfrommemorycache (String key) {if(Mimagecache.get (key)! =NULL){ returnMimagecache.get (key); } return NULL; } Public voidAddbitmaptomemorycache (String key,bitmapdrawable drawable) {if(Getbitmapfrommemorycache (key) = =NULL) {mimagecache.put (key, drawable); }} @Override Public intGetCount () {//TODO auto-generated Method Stub returnImages.IMAGE_URLS.length; } @Override PublicObject GetItem (intposition) { returnImages.image_urls[position]; } @Override Public LongGetitemid (intposition) { //TODO auto-generated Method Stub returnposition; } /*** Asynchronous Task *@authorTaoshihan **/ classImageworkertaskextendsAsynctask<string, Void, bitmapdrawable>{ PrivateImageView ImageView; PublicImageworkertask (ImageView ImageView) { This. imageview=ImageView; } @Overrideprotectedbitmapdrawable doinbackground (String ... params) {string ImageUrl=params[0]; Bitmap Bitmap=Downloadbitmap (IMAGEURL); Bitmapdrawable drawable=Newbitmapdrawable (Getapplicationcontext (). Getresources (), bitmap); Addbitmaptomemorycache (IMAGEURL, drawable); returndrawable; } //Download Image PrivateBitmap Downloadbitmap (String imageUrl) {Bitmap Bitmap=NULL; Try{URL URL=NewURL (IMAGEURL); HttpURLConnection Conn=(HttpURLConnection) url.openconnection (); Conn.setconnecttimeout (10000); InputStream is=Conn.getinputstream (); Bitmap=Bitmapfactory.decodestream (IS); } Catch(Exception e) {}returnbitmap; } //the download completed@Overrideprotected voidOnPostExecute (bitmapdrawable result) {if(imageview!=NULL&&result!=NULL) {imageview.setimagedrawable (result); } } } } Static classimages{ Public Final Staticstring[] Image_urls =Newstring[]{"Http://img.my.csdn.net/uploads/201508/05/1438760758_3497.jpg", "Http://img.my.csdn.net/uploads/201508/05/1438760758_6667.jpg", "Http://img.my.csdn.net/uploads/201508/05/1438760757_3588.jpg", "Http://img.my.csdn.net/uploads/201508/05/1438760756_3304.jpg", "Http://img.my.csdn.net/uploads/201508/05/1438760755_6715.jpeg", "Http://img.my.csdn.net/uploads/201508/05/1438760726_5120.jpg", "Http://img.my.csdn.net/uploads/201508/05/1438760726_8364.jpg", "Http://img.my.csdn.net/uploads/201508/05/1438760725_4031.jpg", "Http://img.my.csdn.net/uploads/201508/05/1438760724_9463.jpg", "Http://img.my.csdn.net/uploads/201508/05/1438760724_2371.jpg", "Http://img.my.csdn.net/uploads/201508/05/1438760707_4653.jpg" }; }}
[Android] Practice using ListView (II)