How to implement Android ImageGetter for big images? -


i showing html textview:

    string html = "hello " +             "<img src='http://www.gravatar.com/avatar/" +             "f9dd8b16d54f483f22c0b7a7e3d840f9?s=32&d=identicon&r=pg'/>" +             " test " +             "<img src='http://www.gravatar.com/avatar/a9317e7f0a78bb10a980cadd9dd035c9?s=32&d=identicon&r=pg'/>";      spanned htmlspan = html.fromhtml(html, imageparser, null);     textview.settext(htmlspan); 

the following imageparser job:

  public class urlimageparser implements html.imagegetter { context c; view container;  /***  * construct urlimageparser execute asynctask , refresh container  * @param t  * @param c  */ public urlimageparser(view t, context c) {     this.c = c;     this.container = t; }  public drawable getdrawable(string source) {     urldrawable urldrawable = new urldrawable();      // actual source     imagegetterasynctask asynctask =             new imagegetterasynctask( urldrawable);      asynctask.execute(source);      // return reference urldrawable change actual image     // src tag     return urldrawable; }  public class imagegetterasynctask extends asynctask<string, void, drawable> {     urldrawable urldrawable;      public imagegetterasynctask(urldrawable d) {         this.urldrawable = d;     }      @override     protected drawable doinbackground(string... params) {         string source = params[0];         return fetchdrawable(source);     }      @override     protected void onpostexecute(drawable result) {         // set correct bound according result http call         urldrawable.setbounds(0, 0, 0 + result.getintrinsicwidth(), 0                 + result.getintrinsicheight());          // change reference of current drawable result         // http call         urldrawable.drawable = result;          // redraw image invalidating container         urlimageparser.this.container.invalidate();     }      /***      * drawable url      * @param urlstring      * @return      */     public drawable fetchdrawable(string urlstring) {         try {             inputstream = fetch(urlstring);             drawable drawable = drawable.createfromstream(is, "src");             drawable.setbounds(0, 0, 0 + drawable.getintrinsicwidth(), 0                     + drawable.getintrinsicheight());             return drawable;         } catch (exception e) {             return null;         }     }      private inputstream fetch(string urlstring) throws malformedurlexception, ioexception {         defaulthttpclient httpclient = new defaulthttpclient();         httpget request = new httpget(urlstring);         httpresponse response = httpclient.execute(request);         return response.getentity().getcontent();     } } 

}

but not work bigger images. string not work follows:

  string html = "hello " +             "<img src='http://darwin.suav.biz/image/data/produse/tablete/apple/ipad 4/hero_slide1.png" +             " test " +             "<img src='http://www.gravatar.com/avatar/a9317e7f0a78bb10a980cadd9dd035c9?s=32&d=identicon&r=pg'/>"; 

it crashes following error:

java.lang.nullpointerexception         @ md.darwin.catalog.manager.urlimageparser$imagegetterasynctask$1.run(urlimageparser.java:70)         @ android.os.handler.handlecallback(handler.java:733)         @ android.os.handler.dispatchmessage(handler.java:95)         @ android.os.looper.loop(looper.java:136)         @ android.app.activitythread.main(activitythread.java:5038)         @ java.lang.reflect.method.invokenative(native method)         @ java.lang.reflect.method.invoke(method.java:515)         @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:785)         @ com.android.internal.os.zygoteinit.main(zygoteinit.java:601)         @ dalvik.system.nativestart.main(native method) 

and urlimageparser.java:70 is:

              urldrawable.setbounds(0, 0, result.getintrinsicwidth(), result.getintrinsicheight()); 

i have tried picasso, method found here: https://github.com/aegis123/bettyskitchen-app/blob/master/bettyskitchen-app/src/main/java/com/bettys/kitchen/recipes/app/utils/imagegetter.java

but error(no crash): failed decode stream

does know issue bigger images? why null inside onpostexecute?

you have log , check catch(exception e) catching. it's obvious there's exception there , fetchdrawable() returning null. you're not analysing/checking it, there's no way know what's wrong there.

thank you. helped. did not suppose imageurl bad. works inputstream bigger images.

glad worked. if apply picasso , not use asynctask. picasso threading more fine tuned asynctask , have 2 level (ram n disk) caching.


Comments