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
Post a Comment