android - Caching images fetched from the internet? -
i want cache images fetch on internet. each time images swiped in gallery, wont fetched each time. if 1 tell me how code appreciated.
if(build.version.sdk_int >= 11){ strictmode.threadpolicy policy = new strictmode.threadpolicy.builder().permitall().build(); strictmode.setthreadpolicy(policy); } my.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { startactivity(n); } }); gamenews.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { } }); //executing asynctask in background thread images. mytask mytask = new mytask(); mytask.execute(); }
get image methods:
//method images text documents updated every month. public void getimages() throws ioexception{ defaulthttpclient httpclient = new defaulthttpclient(); httpget httppost = new httpget("https://sites.google.com/site/theitrangers/images/webimages.txt"); httpresponse response; response = httpclient.execute(httppost); httpentity ht = response.getentity(); bufferedhttpentity buf = new bufferedhttpentity(ht); inputstream = buf.getcontent(); bufferedreader r = new bufferedreader(new inputstreamreader(is)); stringbuilder total = new stringbuilder(); string line; while ((line = r.readline()) != null) { total.append(line + "\n"); imageurl = total.tostring(); log.v("getimage1", "retreived image"); } } public void getimage2() throws ioexception{ defaulthttpclient httpclient = new defaulthttpclient(); httpget httppost = new httpget("https://sites.google.com/site/theitrangers/images/webimage2.txt"); httpresponse response; response = httpclient.execute(httppost); httpentity ht = response.getentity(); bufferedhttpentity buf = new bufferedhttpentity(ht); inputstream = buf.getcontent(); bufferedreader r = new bufferedreader(new inputstreamreader(is)); stringbuilder total = new stringbuilder(); string line; while ((line = r.readline()) != null) { total.append(line + "\n"); imageurl2 = total.tostring(); log.v("getimage2", "retreived image"); } } public void getimage3() throws ioexception{ defaulthttpclient httpclient = new defaulthttpclient(); httpget httppost = new httpget("https://sites.google.com/site/theitrangers/images/webimage3.txt"); httpresponse response; response = httpclient.execute(httppost); httpentity ht = response.getentity(); bufferedhttpentity buf = new bufferedhttpentity(ht); inputstream = buf.getcontent(); bufferedreader r = new bufferedreader(new inputstreamreader(is)); stringbuilder total = new stringbuilder(); string line; while ((line = r.readline()) != null) { total.append(line + "\n"); imageurl3 = total.tostring(); log.v("getimage3", "retreived image"); } } public void getimage4() throws ioexception{ defaulthttpclient httpclient = new defaulthttpclient(); httpget httppost = new httpget("https://sites.google.com/site/theitrangers/images/webimage4.txt"); httpresponse response; response = httpclient.execute(httppost); httpentity ht = response.getentity(); bufferedhttpentity buf = new bufferedhttpentity(ht); inputstream = buf.getcontent(); bufferedreader r = new bufferedreader(new inputstreamreader(is)); stringbuilder total = new stringbuilder(); string line; while ((line = r.readline()) != null) { total.append(line + "\n"); imageurl4 = total.tostring(); } }
imageadapter class:
//imageadapter gets url of images , put them in format set gallery public class imageadapter extends baseadapter { /** parent context */ private context mycontext;public imageadapter() { // todo auto-generated constructor stub } /** url-strings remote images. */ public string[] myremoteimages = {imageurl,imageurl2,imageurl3,imageurl4}; /** simple constructor saving 'parent' context. */ public imageadapter(context c) { this.mycontext = c; } /** returns amount of images have defined. */ public int getcount() { return this.myremoteimages.length; } /* use array-positions unique ids */ public object getitem(int position) { return position; } public long getitemid(int position) { return position; } /** returns new imageview * displayed, depending on * position passed. */ public view getview(int position, view convertview, viewgroup parent) { imageview = new imageview(this.mycontext); try { url aurl = new url(myremoteimages[position]); urlconnection conn = aurl.openconnection(); conn.connect(); inputstream = conn.getinputstream(); /* buffered performance plus. */ bufferedinputstream bis = new bufferedinputstream(is); /* decode url-data bitmap. */ bitmap bm = bitmapfactory.decodestream(bis); bis.close(); is.close(); log.v(imageurl, "retrieving image"); /* apply bitmap imageview returned. */ i.setimagebitmap(bm); } catch (ioexception e) { log.e("debugtag", "remtoe image exception", e); } /* image should scaled width/height set. */ i.setscaletype(imageview.scaletype.fit_center); /* set width/height of imageview. */ i.setlayoutparams(new gallery.layoutparams(150, 150)); return i; } /** returns size (0.0f 1.0f) of views * depending on 'offset' center. */ public float getscale(boolean focused, int offset) { /* formula: 1 / (2 ^ offset) */ return math.max(0, 1.0f / (float)math.pow(2, math.abs(offset))); } } //the important asynctask method. running background thread images , set them gallery. private class mytask extends asynctask<void, void, void>{ @override protected void doinbackground(void... arg0) {try { getimages(); log.v("mytask", "image 1 retreived"); getimage2(); log.v("mytask", "image 2 retreived"); getimage3(); log.v("mytask", "image 3 retreived"); getimage4(); log.v("mytask", "image 4 retreived"); } catch (ioexception e) { log.e("mainmenu retreive image", "image retreival failed"); e.printstacktrace(); } return null; } @override protected void onpostexecute(void notused){ ((gallery) findviewbyid(r.id.gallery)) .setadapter(new imageadapter(mainmenu.this)); } }
there couple ways this, assuming filename url unique, write them sd card or internal storage. example:
file cachedir = new file("my-cache-dir"); file[] filelist = cachedir.listfiles(); int index = linearsearch.(filelist, uri.getfilename()); if(index != -1){ // load file } else { // load web }
there several other ways this, such database or flat file. remember have generate same cache key every time what's cached.
Comments
Post a Comment