java - Not able to load local json data in android -
i trying load json data in android device,however there condition.
1.)if there internet download data internet specific url.
2.)if there no internet, use local data in assets folder name tch.txt.
i did checking internet , executing required class.
my code works correct fetching data while there internet, gives me following error
07-13 16:24:03.800 14691-14691/scientist.jobless.foodmana i/dalvikvm-heap﹕ grow heap (frag case) 11.560mb 692236-byte allocation 07-13 16:24:03.828 14691-14691/scientist.jobless.foodmana i/dalvikvm-heap﹕ grow heap (frag case) 12.259mb 692236-byte allocation 07-13 16:24:03.904 14691-14691/scientist.jobless.foodmana w/egl_genymotion﹕ eglsurfaceattrib not implemented 07-13 16:24:03.988 14691-14697/scientist.jobless.foodmana i/jdwp﹕ ignoring second debugger -- accepting , dropping 07-13 16:24:06.792 14691-14691/scientist.jobless.foodmana w/egl_genymotion﹕ eglsurfaceattrib not implemented 07-13 16:24:06.840 14691-14691/scientist.jobless.foodmana w/egl_genymotion﹕ eglsurfaceattrib not implemented 07-13 16:24:07.764 14691-14691/scientist.jobless.foodmana i/dalvikvm﹕ not find method android.content.res.typedarray.getchangingconfigurations, referenced method android.support.v7.internal.widget.tinttypedarray.getchangingconfigurations 07-13 16:24:07.764 14691-14691/scientist.jobless.foodmana w/dalvikvm﹕ vfy: unable resolve virtual method 491: landroid/content/res/typedarray;.getchangingconfigurations ()i 07-13 16:24:07.764 14691-14691/scientist.jobless.foodmana i/dalvikvm﹕ not find method android.content.res.typedarray.gettype, referenced method android.support.v7.internal.widget.tinttypedarray.gettype 07-13 16:24:07.764 14691-14691/scientist.jobless.foodmana w/dalvikvm﹕ vfy: unable resolve virtual method 513: landroid/content/res/typedarray;.gettype (i)i 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ org.json.jsonexception: no value name 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ org.json.jsonobject.get(jsonobject.java:354) 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ org.json.jsonobject.getstring(jsonobject.java:510) 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ scientist.jobless.foodmana.jsonloadsubfirstfirst$localdownloadjson.doinbackground(jsonloadsubfirstfirst.java:141) 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ scientist.jobless.foodmana.jsonloadsubfirstfirst$localdownloadjson.doinbackground(jsonloadsubfirstfirst.java:80) 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ android.os.asynctask$2.call(asynctask.java:287) 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ java.util.concurrent.futuretask$sync.innerrun(futuretask.java:305) 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ java.util.concurrent.futuretask.run(futuretask.java:137) 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ android.os.asynctask$serialexecutor$1.run(asynctask.java:230) 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1076) 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:569) 07-13 16:24:07.780 14691-14742/scientist.jobless.foodmana w/system.err﹕ @ java.lang.thread.run(thread.java:856) 07-13 16:24:07.804 14691-14691/scientist.jobless.foodmana w/egl_genymotion﹕ eglsurfaceattrib not implemented 07-13 16:24:07.812 14691-14691/scientist.jobless.foodmana w/egl_genymotion﹕ eglsurfaceattrib not implemented 07-13 16:24:07.816 14691-14691/scientist.jobless.foodmana i/memorycache﹕ memorycache use 16.0mb 07-13 16:24:07.816 14691-14691/scientist.jobless.foodmana w/dalvikvm﹕ threadid=1: thread exiting uncaught exception (group=0xa6266288) 07-13 16:24:07.816 14691-14691/scientist.jobless.foodmana e/androidruntime﹕ fatal exception: main java.lang.nullpointerexception @ scientist.jobless.foodmana.listviewadapter.getcount(listviewadapter.java:39) @ android.widget.listview.setadapter(listview.java:460) @ scientist.jobless.foodmana.jsonloadsubfirstfirst$localdownloadjson.onpostexecute(jsonloadsubfirstfirst.java:176) @ scientist.jobless.foodmana.jsonloadsubfirstfirst$localdownloadjson.onpostexecute(jsonloadsubfirstfirst.java:80) @ android.os.asynctask.finish(asynctask.java:631) @ android.os.asynctask.access$600(asynctask.java:177) @ android.os.asynctask$internalhandler.handlemessage(asynctask.java:644) @ android.os.handler.dispatchmessage(handler.java:99) @ android.os.looper.loop(looper.java:137) @ android.app.activitythread.main(activitythread.java:4745) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:511) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:786) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:553) @ dalvik.system.nativestart.main(native method) i thinking listviewadapter class has problem, not figure out. attaching jsonloader class , listviewadapterclass.
jsonloadsubfirstfirst.java
public class jsonloadsubfirstfirst extends actionbaractivity { // declare variables //firstactivity seems main, lets see progressdialog pd; jsonobject jsonobject; jsonobject jsonobject2; string myjsonstring; jsonarray jsonarray; listview listview; listviewadapter adapter; progressdialog mprogressdialog; arraylist<hashmap<string, string>> arraylist; arraylist<hashmap<string, string>> localarraylist; static string rank = "rank"; static string country = "country"; static string population = "population"; static string flag = "flag"; static final string name = "name"; static final string time = "time"; static final string venue = "serves"; static final string ingredients = "ingredients"; static final string prize_money2 = "prize2"; static final string registration_fee = "date"; static final string description = "description"; private boolean isnetworkavailable() { connectivitymanager connectivitymanager = (connectivitymanager) getsystemservice(context.connectivity_service); networkinfo activenetworkinfo = connectivitymanager.getactivenetworkinfo(); return activenetworkinfo != null && activenetworkinfo.isconnected(); } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // view listview_main.xml setcontentview(r.layout.listview_main); // execute downloadjson asynctask if(isnetworkavailable()) new downloadjson(this).execute(); else //setcontentview(r.layout.nonet); new localdownloadjson().execute(); } private class localdownloadjson extends asynctask<void, void, void> { @override protected void onpreexecute() { super.onpreexecute(); pd = new progressdialog(jsonloadsubfirstfirst.this); pd.setmessage("loading..."); pd.setprogressstyle(progressdialog.style_spinner); pd.setindeterminate(true); pd.setcancelable(false); pd.show(); } @override protected void doinbackground(void... params) { // create array localarraylist = new arraylist<hashmap<string, string>>(); // retrieve json objects given url address stringbuffer sb = new stringbuffer(); bufferedreader br = null; try { br = new bufferedreader(new inputstreamreader(getassets().open("tch.txt"))); string temp; while ((temp = br.readline()) != null) sb.append(temp); } catch (ioexception e) { e.printstacktrace(); } { try { br.close(); } catch (ioexception e) { e.printstacktrace(); } } myjsonstring = sb.tostring(); try{ jsonobject jsonobj = new jsonobject(myjsonstring); jsonarray attendance = jsonobj.getjsonarray("events"); (int = 0; < attendance.length(); i++) { jsonobject = attendance.getjsonobject(i); string name = a.getstring("name"); string time = a.getstring("time"); string ingredients = a.getstring("ingredients"); string serves = a.getstring("serves"); string descr = a.getstring("descr"); hashmap<string, string> contact = new hashmap<string, string>(); // adding each child node hashmap key => value contact.put("event", name); contact.put("fee", time); contact.put("prize1", ingredients); contact.put("prize2", serves); contact.put("descr", descr); // adding contact contact list localarraylist.add(contact); } } catch (jsonexception e) { e.printstacktrace(); } return null; } @override protected void onpostexecute(void args) { // locate listview in listview_main.xml //setcontentview(r.layout.listview_main); listview = (listview) findviewbyid(r.id.listview); // pass results listviewadapter.java adapter = new listviewadapter(jsonloadsubfirstfirst.this, arraylist); // set adapter listview listview.setadapter(adapter); // close progressdialog // mprogressdialog.dismiss(); // textview.setvisibility(view.visible); pd.dismiss(); super.onpostexecute(args); } } private class downloadjson extends asynctask<void, void, void> { private final progressdialog progressdialog; public downloadjson(context ctx) { progressdialog = mycustomprogressdialog.ctor(ctx); } @override protected void onpreexecute() { super.onpreexecute(); progressdialog.show(); } @override protected void doinbackground(void... params) { // create array arraylist = new arraylist<hashmap<string, string>>(); // retrieve json objects given url address jsonobject = jsonfunctions.getjsonfromurl("https://lit-hamlet-6856.herokuapp.com/eventslist/technical"); try { // locate array name in json jsonarray = jsonobject.getjsonarray("events"); (int = 0; < jsonarray.length(); i++) { hashmap<string, string> map = new hashmap<string, string>(); jsonobject = jsonarray.getjsonobject(i); // retrive json objects map.put("name", jsonobject.getstring("name")); map.put("time", jsonobject.getstring("time")); map.put("serves", jsonobject.getstring("serves")); map.put("ingredients", jsonobject.getstring("ingredients")); map.put("description",jsonobject.getstring("description")); // set json objects array arraylist.add(map); } } catch (jsonexception e) { log.e("error", e.getmessage()); e.printstacktrace(); } return null; } @override protected void onpostexecute(void args) { // locate listview in listview_main.xml //setcontentview(r.layout.listview_main); listview = (listview) findviewbyid(r.id.listview); // pass results listviewadapter.java adapter = new listviewadapter(jsonloadsubfirstfirst.this, arraylist); // set adapter listview listview.setadapter(adapter); // close progressdialog // mprogressdialog.dismiss(); super.onpostexecute(args); // textview.setvisibility(view.visible); progressdialog.hide(); super.onpostexecute(args); } } } listviewadapter.java
public class listviewadapter extends baseadapter { private int lastposition = -1; // declare variables context context; layoutinflater inflater; arraylist<hashmap<string, string>> data; imageloader imageloader; hashmap<string, string> resultp = new hashmap<string, string>(); public listviewadapter(context context, arraylist<hashmap<string, string>> arraylist) { this.context = context; data = arraylist; imageloader = new imageloader(context); } @override public int getcount() { return data.size(); } @override public object getitem(int position) { return null; } @override public long getitemid(int position) { return 0; } public view getview(final int position, view convertview, viewgroup parent) { // declare variables textview rank; textview country; textview population; imageview flag; textview desc; inflater = (layoutinflater) context.getsystemservice(context.layout_inflater_service); view itemview = inflater.inflate(r.layout.listview_item, parent, false); // position resultp = data.get(position); // locate textviews in listview_item.xml rank = (textview) itemview.findviewbyid(r.id.rank); // yoyo.with(techniques.tada).duration(700).playon(itemview.findviewbyid(r.id.rank)); animation country = (textview) itemview.findviewbyid(r.id.country); population = (textview) itemview.findviewbyid(r.id.population); desc=(textview)itemview.findviewbyid(r.id.description); // locate imageview in listview_item.xml flag = (imageview) itemview.findviewbyid(r.id.flag); // capture position , set results textviews rank.settext(resultp.get(firstactivity.name)); country.settext(resultp.get(firstactivity.time)); /** put views want show on list**/ // desc.settext(resultp.get(mainactivity.description)); //population.settext(resultp.get(mainactivity.venue));//commented line seen in list view can seen in individual list // capture position , set results imageview // passes flag images url imageloader.class imageloader.displayimage(resultp.get(firstactivity.ingredients), flag); animation animation = animationutils.loadanimation(itemview.getcontext(), (position > lastposition) ? r.anim.up_from_bottom : r.anim.down_from_top); itemview.startanimation(animation); lastposition = position; // capture listview item click itemview.setonclicklistener(new onclicklistener() { @override public void onclick(view arg0) { // position resultp = data.get(position); intent intent = new intent(context, singleitemview.class); // pass data rank intent.putextra("name", resultp.get(firstactivity.name)); // pass data country intent.putextra("time", resultp.get(firstactivity.time)); // pass data population intent.putextra("serves",resultp.get(firstactivity.venue)); // pass data flag intent.putextra("flag", resultp.get(firstactivity.ingredients)); intent.putextra("description",resultp.get(firstactivity.description)); // start singleitemview class context.startactivity(intent); } }); return itemview; } } can tell me wrong in code :-) ?
in localdownloadjson class, adding items localarraylist use arraylist in adapter constructor, why empty data (blanc screen).
just change:
adapter = new listviewadapter(jsonloadsubfirstfirst.this, arraylist); to
adapter = new listviewadapter(jsonloadsubfirstfirst.this, localarraylist); in onpostexecute() method of localdownloadjson.
Comments
Post a Comment