java - Trying to parse json to list view on android but getting error -
i making app fetches json websites , parses json listview on android.
i json using http request make 2 arrays websites t hold websites names , links hold links.i want listview show websites names , on clicking open website in browser.
can please me.tried could. me figure out problem or tell me way thanks.
trying json , parse listview below code:
public class getwebsitelist extends asynctask<string, string, string> { // creating json parser object arraylist<hashmap<string, string>> productslist; string websites[]=new string[10]; string links[]=new string[10]; // url products list private string url_all_products = "http://androidtest.cu.cc/getwebsites.php"; // json node names private static final string tag_success = "success"; private static final string tag_websites = "websites"; private static final string tag_sno = "sno"; private static final string tag_name = "name"; private static final string tag_link = "link"; // products jsonarray jsonarray products = null; // progress dialog private progressdialog pdialog; protected void onpreexecute() { super.onpreexecute(); pdialog = new progressdialog(mainpage.this); pdialog.setmessage("loading website list.please wait..."); pdialog.setindeterminate(false); pdialog.setcancelable(true); pdialog.show(); } @override protected string doinbackground(string... arg0) { // building parameters list<namevaluepair> params = new arraylist<namevaluepair>(); jsonparser jparser = new jsonparser(); // getting json string url jsonobject json = jparser.makehttprequest(url_all_products, "get", params); //arrayadapter adapter = arrayadapter. // check log cat json reponse log.d("nitrek products: ", json.tostring()); try { // checking success tag int success = json.getint(tag_success); string suc; switch(success) { case 1: suc="true"; break; case 0: suc="false"; break; default: suc="unkonwn"; break; } if (success == 1) { // products found // getting array of products log.d(" nitrek success",suc); products = json.getjsonarray(tag_websites); // looping through products log.d(" nitrek websites", products.tostring()); (int = 0; < products.length(); i++) { jsonobject c = products.getjsonobject(i); // storing each json item in variable string id = c.getstring(tag_sno); string name = c.getstring(tag_name); string link= c.getstring(tag_link); log.d("nitrek website",id+name+link); // websites[i]=new string(); websites[i]=name; links[i]=link; log.d("nitrek web",websites[i]+links[i]); /* creating new hashmap hashmap<string, string> map = new hashmap<string, string>(); // adding each child node hashmap key => value try { map.put(tag_sno, id); map.put(tag_name, name); productslist.add(map); } catch (exception e) { e.printstacktrace(); } // adding hashlist arraylist */ } } else { // no products found // launch add new product activity toast.maketext(mainpage.this,"no website found", toast.length_long).show(); } } catch (jsonexception e) { e.printstacktrace(); } return null; } @override protected void onpostexecute(final string result) { pdialog.dismiss(); runonuithread(new runnable() { public void run() { /** * updating parsed json data listview */ //listadapter adapter = new simpleadapter(mainpage.this, productslist, r.layout.listitem, new string[]{tag_sno, tag_name},new int[]{r.id.sno, r.id.name}); // updating listview try { //arrayadapter<string> adapter = new arrayadapter<string>(mainpage.this, r.layout.listitem, r.id.name, websites); final arraylist<string> list = new arraylist<string>(); (int = 0; < websites.length; ++i) { list.add(websites[i]); } final stablearrayadapter adapter = new stablearrayadapter(mainpage.this, r.layout.listitem, list); //arrayadapter<string> ad = new arrayadapter<string>(mainpage.this, r.layout.listitem, websites); listview lv = (listview) findviewbyid(r.id.list); lv.setadapter(adapter); lv.setonitemclicklistener(new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { //intent intent = new intent(this, homepage.class); count = 0; string url = links[position]; toast.maketext(mainpage.this, "opening: " + url, toast.length_short).show(); intent = new intent(intent.action_view, uri.parse(url)); //notify_test(url); startactivity(i); } }); } catch (exception e) { log.d("error list nitrekerror", "below"); e.printstacktrace(); } toast.maketext(mainpage.this, result, toast.length_long).show(); int = 0; while (i < websites.length && < 3) { toast.maketext(mainpage.this, websites[i] + " " + links[i], toast.length_long).show(); i++; } } }); } } private class stablearrayadapter extends arrayadapter<string> { hashmap<string, integer> midmap = new hashmap<string, integer>(); public stablearrayadapter(context context, int textviewresourceid, list<string> objects) { super(context, textviewresourceid, objects); (int = 0; < objects.size(); ++i) { midmap.put(objects.get(i), i); } } @override public long getitemid(int position) { string item = getitem(position); return midmap.get(item); } @override public boolean hasstableids() { return true; } } but getting error , not able figure out why? below logcat:
07-08 00:58:34.245 27826-27826/? e/androidruntime﹕ fatal exception: main process: nitz.nitrek.myrtoguide, pid: 27826 java.lang.nullpointerexception: attempt invoke virtual method 'java.lang.string java.lang.object.tostring()' on null object reference @ android.widget.arrayadapter.createviewfromresource(arrayadapter.java) @ android.widget.arrayadapter.getview(arrayadapter.java) @ android.widget.abslistview.obtainview(abslistview.java) @ android.widget.listview.measureheightofchildren(listview.java) @ android.widget.listview.onmeasure(listview.java) @ android.view.view.measure(view.java) @ android.widget.relativelayout.measurechild(relativelayout.java) @ android.widget.relativelayout.onmeasure(relativelayout.java) @ android.view.view.measure(view.java) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java) @ android.widget.framelayout.onmeasure(framelayout.java) @ android.view.view.measure(view.java) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java) @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java) @ android.widget.linearlayout.measurevertical(linearlayout.java) @ android.widget.linearlayout.onmeasure(linearlayout.java) @ android.view.view.measure(view.java) @ android.support.v4.widget.drawerlayout.onmeasure(drawerlayout.java:868) @ android.view.view.measure(view.java) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java) @ android.widget.framelayout.onmeasure(framelayout.java) @ android.support.v7.internal.widget.contentframelayout.onmeasure(contentframelayout.java:124) @ android.view.view.measure(view.java) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java) @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java) @ android.widget.linearlayout.measurevertical(linearlayout.java) @ android.widget.linearlayout.onmeasure(linearlayout.java) @ android.view.view.measure(view.java) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java) @ android.widget.framelayout.onmeasure(framelayout.java) @ android.view.view.measure(view.java) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java) @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java) @ android.widget.linearlayout.measurevertical(linearlayout.java) @ android.widget.linearlayout.onmeasure(linearlayout.java) @ android.view.view.measure(view.java) @ android.view.viewgroup.measurechildwithmargins(viewgroup.java) @ android.widget.framelayout.onmeasure(framelayout.java) @ com.android.internal.policy.impl.phonewindow$decorview.onmeasure(phonewindow.java) @ android.view.view.measure(view.java) @ android.view.viewrootimpl.performmeasure(viewrootimpl.java) @ android.view.viewrootimpl.measurehierarchy(viewrootimpl.java) @ android.view.viewrootimpl.performtraversals(viewrootimpl.java) @ android.view.viewrootimpl.dotraversal(viewrootimpl.java) @ android.view.viewrootimpl$traversalrunnable.run(viewrootimpl.java) @ android.view.choreographer$callbackrecord.run(choreographer.java) @ android.view.choreographer.docallbacks(choreographer.java) @ android.view.choreographer.doframe(choreographer.java) @ android.view.choreographer$framedisplayeventreceiver.run(choreographer.java) @ android.os.handler.handlecallback(handler.java) @ android.os.handler.dispatchmessage(handler.java) @ android.os.looper.loop(looper.java) @ android.app.activitythread.main(activitythread.java) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java) @ com.android.internal.os.zygoteinit.main(zygoteinit.java) 07-08 00:58:34.245 780-3917/? e/activitymanager﹕ app crashed! process: nitz.nitrek.myrtoguide
you had declared websites array of size 10 filling 2-3 entries depending of number of websites got response on passing whole array arrayadapter getting null pointer exception.so got number of websites received in response , dynamically declared array of size only.
Comments
Post a Comment