Can't get data from JSON parser android studio -
i'm trying single data jsonparser list in android studio. no error when compiling keeps on force closed on device. here jsonparser code:
public class jsonparser { // receives jsonobject , returns list public list<hashmap<string,object>> parse(jsonobject jobject){ jsonarray jcountries = null; try { // retrieves elements in 'countries' array jcountries = jobject.getjsonarray("konten"); } catch (jsonexception e) { e.printstacktrace(); } // invoking getcountries array of json object // each json object represent country return getcountries(jcountries); } private list<hashmap<string, object>> getcountries(jsonarray jcountries){ int countrycount = jcountries.length(); list<hashmap<string, object>> countrylist = new arraylist<hashmap<string,object>>(); hashmap<string, object> country = null; // taking each country, parses , adds list object for(int i=0; i<countrycount;i++){ try { // call getcountry country json object parse country country = getcountry((jsonobject)jcountries.get(i)); countrylist.add(country); } catch (jsonexception e) { e.printstacktrace(); } } return countrylist; } // parsing country json object private hashmap<string, object> getcountry(jsonobject jcountry){ hashmap<string, object> country = new hashmap<string, object>(); string idkos = ""; string namakos = ""; string alamat = ""; string cp = ""; string koordinat1 = ""; string koordinat2 = ""; string fasilitas = ""; string harga = ""; string jenis = ""; string foto1 = ""; string foto2 = ""; string foto3 = ""; /*string countryname = ""; string flag=""; string language = ""; string capital = ""; string currencycode = ""; string currencyname = "";*/ try { idkos = jcountry.getstring("id_kos"); namakos = jcountry.getstring("nama_kos"); alamat = jcountry.getstring("alamat"); cp = jcountry.getstring("cp"); koordinat1 = jcountry.getstring("koordinat1"); koordinat2 = jcountry.getstring("koordinat2"); fasilitas = jcountry.getstring("fasilitas"); harga = jcountry.getstring("harga"); jenis = jcountry.getstring("jenis"); foto1 = jcountry.getstring("foto1"); foto2 = jcountry.getstring("foto2"); foto3 = jcountry.getstring("foto3"); country.put("id_kos", idkos); country.put("nama_kos", namakos); country.put("alamat", alamat); country.put("cp", cp); country.put("koordinat1", koordinat1); country.put("koordinat2", koordinat2); country.put("fasilitas", fasilitas); country.put("harga", harga); country.put("jenis", jenis); country.put("foto1", r.drawable.blank); country.put("foto2", foto2); country.put("foto3", foto3); country.put("id_kos", idkos); country.put("flag_path", foto1); } catch (jsonexception e) { e.printstacktrace(); } return country; } } and activity code:
public class displaypeta extends fragmentactivity { private static final string tag_sentkat = "exkategori"; private static final string tag_sentmin = "exmin"; private static final string tag_sentmax = "exmax"; listview mlistview; // list object store parsed countries list list<hashmap<string, object>> countries = null; private googlemap mmap; // might null if google play services apk not available. @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.display_peta); intent in = getintent(); string exmin = in.getstringextra(tag_sentmin); string exmax = in.getstringextra(tag_sentmax); string exkat = in.getstringextra(tag_sentkat); // url json data string strurl = "http://smartkos.zz.mu/android/kos.php?min=" +exmin+ "&max=" +exmax+ "&jenis=" +exkat; //string strurl = "http://wptrafficanalyzer.in/p/demo1/first.php/countries"; // creating new non-ui thread task download json data downloadtask downloadtask = new downloadtask(); // starting download process downloadtask.execute(strurl); // getting reference listview of activity_main mlistview = (listview) findviewbyid(r.id.lv_kos); // set new adapter listview simpleadapter adapter = (simpleadapter ) mlistview.getadapter(); // setting adapter listview mlistview.setadapter(adapter); // click listener + intent displayinfo adapterview.onitemclicklistener itemclicklistener = new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view container, int position, long id) { // getting container layout of listview //linearlayout linearlayoutparent = (linearlayout) container; // getting inner linear layout //linearlayout linearlayoutchild = (linearlayout ) linearlayoutparent.getchildat(1); // getting country textview //textview nama = (textview) linearlayoutchild.getchildat(0); string nama = ((textview) container.findviewbyid(r.id.nama)).gettext().tostring(); string idkos = ((textview) container.findviewbyid(r.id.id)).gettext().tostring(); string alamat = ((textview) container.findviewbyid(r.id.alamat)).gettext().tostring(); string kontak = ((textview) container.findviewbyid(r.id.kontak)).gettext().tostring(); string jenis = ((textview) container.findviewbyid(r.id.jenis)).gettext().tostring(); string harga = ((textview) container.findviewbyid(r.id.harga)).gettext().tostring(); string info = ((textview) container.findviewbyid(r.id.infotext)).gettext().tostring(); string gal1 = ((textview) container.findviewbyid(r.id.gal1)).gettext().tostring(); string gal2 = ((textview) container.findviewbyid(r.id.gal2)).gettext().tostring(); string gal3 = ((textview) container.findviewbyid(r.id.gal3)).gettext().tostring(); string lati = ((textview) container.findviewbyid(r.id.latitude)).gettext().tostring(); string longi = ((textview) container.findviewbyid(r.id.longitude)).gettext().tostring(); //toast.maketext(getbasecontext(), nama.gettext().tostring(), toast.length_short).show(); toast.maketext(getbasecontext(), nama, toast.length_short).show(); // memulai memanggil ke class kontakactivity dengan data intent in = new intent(getapplicationcontext(),displayinfo.class); in.putextra("id", idkos); in.putextra("nama", nama); in.putextra("alamat", alamat); in.putextra("kontak", kontak); in.putextra("jenis", jenis); in.putextra("harga", harga); in.putextra("info", info); in.putextra("gallery1", gal1); in.putextra("gallery2", gal2); in.putextra("gallery3", gal3); in.putextra("lat", lati); in.putextra("lon", longi); startactivity(in); } }; // setting item click listener listview mlistview.setonitemclicklistener(itemclicklistener); setupmapifneeded(); } /** method download json data url */ private string downloadurl(string strurl) throws ioexception { string data = ""; inputstream istream = null; try{ url url = new url(strurl); // creating http connection communicate url httpurlconnection urlconnection = (httpurlconnection) url.openconnection(); // connecting url urlconnection.connect(); // reading data url istream = urlconnection.getinputstream(); bufferedreader br = new bufferedreader(new inputstreamreader(istream)); stringbuffer sb = new stringbuffer(); string line = ""; while( ( line = br.readline()) != null){ sb.append(line); } data = sb.tostring(); br.close(); }catch(exception e){ log.d("exception download url", e.tostring()); }finally{ istream.close(); } return data; } /** asynctask download json data */ private class downloadtask extends asynctask<string, integer, string> { string data = null; @override protected string doinbackground(string... url) { try{ data = downloadurl(url[0]); }catch(exception e){ log.d("background task",e.tostring()); } return data; } @override protected void onpostexecute(string result) { // parsing of xml data done in non-ui thread listviewloadertask listviewloadertask = new listviewloadertask(); // start parsing xml data listviewloadertask.execute(result); } } /** asynctask parse json data , load listview */ private class listviewloadertask extends asynctask<string, void, simpleadapter>{ jsonobject jobject; // doing parsing of xml data in non-ui thread @override protected simpleadapter doinbackground(string... strjson) { try{ jobject = new jsonobject(strjson[0]); jsonparser jsonparser = new jsonparser(); jsonparser.parse(jobject); }catch(exception e){ log.d("json exception1",e.tostring()); } // instantiating json parser class jsonparser jsonparser = new jsonparser(); //list<hashmap<string, object>> countries = null; try{ // getting parsed data list construct countries = jsonparser.parse(jobject); }catch(exception e){ log.d("exception",e.tostring()); } //ngelebokne latitude longitude neng maps, coba lewat kene // keys used in hashmap string[] = { "id_kos", "nama_kos", "flag", "harga" ,"alamat", "cp", "jenis", "fasilitas", "foto1", "foto2", "foto3", "koordinat1","koordinat2"}; // ids of views in listview_layout int[] = { r.id.id, r.id.nama,r.id.gambar,r.id.harga,r.id.alamat, r.id.kontak, r.id.jenis, r.id.infotext, r.id.gal1, r.id.gal2, r.id.gal3, r.id.latitude, r.id.longitude}; // instantiating adapter store each items // r.layout.listview_layout defines layout of each item simpleadapter adapter = new simpleadapter(getbasecontext(), countries, r.layout.listview_layout, from, to); return adapter; } // invoked android on "doinbackground" executed @override protected void onpostexecute(simpleadapter adapter) { // setting adapter listview mlistview.setadapter(adapter); for(int i=0;i<adapter.getcount();i++){ hashmap<string, object> hm = (hashmap<string, object>) adapter.getitem(i); string imgurl = (string) hm.get("flag_path"); imageloadertask imageloadertask = new imageloadertask(); hashmap<string, object> hmdownload = new hashmap<string, object>(); hm.put("flag_path",imgurl); hm.put("position", i); // starting imageloadertask download , populate image in listview imageloadertask.execute(hm); } } } // asynctask download , load image in listview private class imageloadertask extends asynctask<hashmap<string, object>, void, hashmap<string, object>>{ @override protected hashmap<string, object> doinbackground(hashmap<string, object>... hm) { inputstream istream=null; string imgurl = (string) hm[0].get("flag_path"); int position = (integer) hm[0].get("position"); url url; try { url = new url(imgurl); // creating http connection communicate url httpurlconnection urlconnection = (httpurlconnection) url.openconnection(); // connecting url urlconnection.connect(); // reading data url istream = urlconnection.getinputstream(); // getting caching directory file cachedirectory = getbasecontext().getcachedir(); // temporary file store downloaded image file tmpfile = new file(cachedirectory.getpath() + "/wpta_"+position+".png"); // fileoutputstream temporary file fileoutputstream foutstream = new fileoutputstream(tmpfile); // creating bitmap downloaded inputstream bitmap b = bitmapfactory.decodestream(istream); // writing bitmap temporary file png file b.compress(bitmap.compressformat.png,100, foutstream); // flush fileoutputstream foutstream.flush(); //close fileoutputstream foutstream.close(); // create hashmap object store image path , position in listview hashmap<string, object> hmbitmap = new hashmap<string, object>(); // storing path temporary image file hmbitmap.put("flag",tmpfile.getpath()); // storing position of image in listview hmbitmap.put("position",position); // returning hashmap object containing image path , position return hmbitmap; }catch (exception e) { e.printstacktrace(); } return null; } @override protected void onpostexecute(hashmap<string, object> result) { // getting path downloaded image string path = (string) result.get("flag"); // getting position of downloaded image int position = (integer) result.get("position"); // getting adapter of listview simpleadapter adapter = (simpleadapter ) mlistview.getadapter(); // getting hashmap object @ specified position of listview hashmap<string, object> hm = (hashmap<string, object>) adapter.getitem(position); // overwriting existing path in adapter hm.put("flag",path); // noticing listview dataset changes adapter.notifydatasetchanged(); } } @override protected void onresume() { super.onresume(); setupmapifneeded(); } /** * sets map if possible (i.e., google play services apk correctly * installed) , map has not been instantiated.. ensure ever * call {@link #setupmap()} once when {@link #mmap} not null. * <p/> * if isn't installed {@link supportmapfragment} (and * {@link com.google.android.gms.maps.mapview mapview}) show prompt user * install/update google play services apk on device. * <p/> * user can return fragmentactivity after following prompt , correctly * installing/updating/enabling google play services. since fragmentactivity may not * have been destroyed during process (it * stopped or paused), {@link #oncreate(bundle)} may not called again should call * method in {@link #onresume()} guarantee called. */ private void setupmapifneeded() { // null check confirm have not instantiated map. if (mmap == null) { // try obtain map supportmapfragment. mmap = ((supportmapfragment) getsupportfragmentmanager().findfragmentbyid(r.id.map)) .getmap(); // check if successful in obtaining map. if (mmap != null) { setupmap(); } } } /** * can add markers or lines, add listeners or move camera. in case, * add marker near africa. * <p/> * should called once , when sure {@link #mmap} not null. */ private void setupmap(){ mmap.setmylocationenabled(true); double latitude; double longitude; int jumlahdata= countries.size(); for(int i=0;i<jumlahdata;i++){ latitude = (double) countries.get(i).get("koordinat1"); longitude = (double) countries.get(i).get("koordinat2"); mmap.addmarker(new markeroptions() .position(new latlng(latitude, longitude)) .title("you here!") .snippet("consider located")); } } } it should display map markers in it. works fine without countries.size , countries.get code, when add size , code, application force closed on device. can me?
here logcat:
05-30 21:24:52.322 23664-23664/com.example.sk.maplist e/resourcetype﹕ 0x5ace6988: failed restable::remove() cookie = 0x3, not last table. mheaders.size() = 4. warning spontaneous crashes when garbage collector runs. 05-30 21:24:52.322 23664-23664/com.example.sk.maplist e/asset﹕ error removing runtime skin resource (cookie 0x3) 05-30 21:24:52.322 23664-23664/com.example.sk.maplist i/asset﹕ problem removing runtime skin resources 05-30 21:24:52.602 23664-23664/com.example.sk.maplist d/libegl﹕ loaded /vendor/lib/egl/libegl_adreno.so 05-30 21:24:52.612 23664-23664/com.example.sk.maplist d/libegl﹕ loaded /vendor/lib/egl/libglesv1_cm_adreno.so 05-30 21:24:52.622 23664-23664/com.example.sk.maplist d/libegl﹕ loaded /vendor/lib/egl/libglesv2_adreno.so 05-30 21:24:52.632 23664-23664/com.example.sk.maplist i/adreno-egl﹕ <qegldrvapi_eglinitialize:316>: egl 1.4 qualcomm build: au_linux_android_jb_2.6.1.04.02.02.121.010_msm8960_jb_2.6_cl3869936_release_au (cl3869936) opengl es shader compiler version: 17.01.10.spl build date: 11/16/13 sat local branch: remote branch: quic/jb_2.6 local patches: none reconstruct branch: au_linux_android_jb_2.6.1.04.02.02.121.010 + nothing 05-30 21:24:52.732 23664-23664/com.example.sk.maplist d/openglrenderer﹕ enabling debug mode 0 05-30 21:25:06.136 23664-23664/com.example.sk.maplist i/dalvikvm﹕ not find method android.app.appopsmanager.checkpackage, referenced method com.google.android.gms.common.googleplayservicesutil.zza 05-30 21:25:06.146 23664-23664/com.example.sk.maplist w/dalvikvm﹕ vfy: unable resolve virtual method 120: landroid/app/appopsmanager;.checkpackage (iljava/lang/string;)v 05-30 21:25:06.146 23664-23664/com.example.sk.maplist d/dalvikvm﹕ vfy: replacing opcode 0x6e @ 0x0010 05-30 21:25:06.146 23664-23664/com.example.sk.maplist i/dalvikvm﹕ not find method android.content.pm.packagemanager.getpackageinstaller, referenced method com.google.android.gms.common.googleplayservicesutil.zzg 05-30 21:25:06.146 23664-23664/com.example.sk.maplist w/dalvikvm﹕ vfy: unable resolve virtual method 498: landroid/content/pm/packagemanager;.getpackageinstaller ()landroid/content/pm/packageinstaller; 05-30 21:25:06.146 23664-23664/com.example.sk.maplist d/dalvikvm﹕ vfy: replacing opcode 0x6e @ 0x000b 05-30 21:25:06.156 23664-23664/com.example.sk.maplist i/zzx﹕ making creator dynamically 05-30 21:25:06.226 23664-23664/com.example.sk.maplist i/google maps android api﹕ google play services client version: 7095000 05-30 21:25:06.246 23664-23664/com.example.sk.maplist i/google maps android api﹕ google play services package version: 7571034 05-30 21:25:06.277 23664-23664/com.example.sk.maplist i/dalvikvm﹕ not find method android.app.appopsmanager.checkpackage, referenced method com.google.android.gms.common.ij.a 05-30 21:25:06.277 23664-23664/com.example.sk.maplist w/dalvikvm﹕ vfy: unable resolve virtual method 111: landroid/app/appopsmanager;.checkpackage (iljava/lang/string;)v 05-30 21:25:06.277 23664-23664/com.example.sk.maplist d/dalvikvm﹕ vfy: replacing opcode 0x6e @ 0x0012 05-30 21:25:06.277 23664-23664/com.example.sk.maplist i/dalvikvm﹕ not find method android.content.pm.packagemanager.getpackageinstaller, referenced method com.google.android.gms.common.ij.a 05-30 21:25:06.277 23664-23664/com.example.sk.maplist w/dalvikvm﹕ vfy: unable resolve virtual method 449: landroid/content/pm/packagemanager;.getpackageinstaller ()landroid/content/pm/packageinstaller; 05-30 21:25:06.277 23664-23664/com.example.sk.maplist d/dalvikvm﹕ vfy: replacing opcode 0x6e @ 0x000d 05-30 21:25:06.287 23664-23664/com.example.sk.maplist i/dalvikvm﹕ not find method android.app.notification$builder.setlocalonly, referenced method com.google.android.gms.common.ij.b 05-30 21:25:06.287 23664-23664/com.example.sk.maplist w/dalvikvm﹕ vfy: unable resolve virtual method 154: landroid/app/notification$builder;.setlocalonly (z)landroid/app/notification$builder; 05-30 21:25:06.287 23664-23664/com.example.sk.maplist d/dalvikvm﹕ vfy: replacing opcode 0x6e @ 0x0201 05-30 21:25:06.947 23664-23664/com.example.sk.maplist d/androidruntime﹕ shutting down vm 05-30 21:25:06.947 23664-23664/com.example.sk.maplist w/dalvikvm﹕ threadid=1: thread exiting uncaught exception (group=0x418ea8b0) 05-30 21:25:06.967 23664-23664/com.example.sk.maplist e/androidruntime﹕ fatal exception: main java.lang.runtimeexception: unable start activity componentinfo{com.example.sk.maplist/com.example.sk.maplist.displaypeta}: java.lang.nullpointerexception @ android.app.activitythread.performlaunchactivity(activitythread.java:2261) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2311) @ android.app.activitythread.access$600(activitythread.java:149) @ android.app.activitythread$h.handlemessage(activitythread.java:1293) @ android.os.handler.dispatchmessage(handler.java:99) @ android.os.looper.loop(looper.java:137) @ android.app.activitythread.main(activitythread.java:5214) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:525) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:739) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:555) @ dalvik.system.nativestart.main(native method) caused by: java.lang.nullpointerexception @ com.example.sk.maplist.displaypeta.setupmap(displaypeta.java:400) @ com.example.sk.maplist.displaypeta.setupmapifneeded(displaypeta.java:385) @ com.example.sk.maplist.displaypeta.oncreate(displaypeta.java:131) @ android.app.activity.performcreate(activity.java:5133) @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1087) @ android.app.activitythread.performlaunchactivity(activitythread.java:2225) at android.app.activitythread.handlelaunchactivity(activitythread.java:2311) at android.app.activitythread.access$600(activitythread.java:149) at android.app.activitythread$h.handlemessage(activitythread.java:1293) at android.os.handler.dispatchmessage(handler.java:99) at android.os.looper.loop(looper.java:137) at android.app.activitythread.main(activitythread.java:5214) at java.lang.reflect.method.invokenative(native method) at java.lang.reflect.method.invoke(method.java:525) at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:739) at com.android.internal.os.zygoteinit.main(zygoteinit.java:555) at dalvik.system.nativestart.main(native method)
Comments
Post a Comment