android - NullPointerException parsing JSON data -
i'm trying parse json, i'm using this example.
in example in class parser not used secondary thread , networkonmainthreadexception.
to solve problem have introduced code in asynctask not transfer data since error on line:
contacts = json.getjsonarray(tag_contacts);
this simple code using
jsonparser.java
public class jsonparser { static inputstream = null; static jsonobject jobj = null; static string json = ""; // constructor public jsonparser() { } public jsonobject getjsonfromurl(string url) { new parsejson().execute(url); return jobj; } private class parsejson extends asynctask<string, void, jsonobject>{ protected jsonobject doinbackground(string... params) { // making http request try { // defaulthttpclient defaulthttpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(params[0]); httpresponse httpresponse = httpclient.execute(httppost); httpentity httpentity = httpresponse.getentity(); = httpentity.getcontent(); } catch (unsupportedencodingexception e) { e.printstacktrace(); } catch (clientprotocolexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } try { bufferedreader reader = new bufferedreader(new inputstreamreader( is, "iso-8859-1"), 8); stringbuilder sb = new stringbuilder(); string line = null; while ((line = reader.readline()) != null) { sb.append(line + "\n"); } is.close(); json = sb.tostring(); } catch (exception e) { log.e("buffer error", "error converting result " + e.tostring()); } // try parse string json object try { jobj = new jsonobject(json); } catch (jsonexception e) { log.e("json parser", "error parsing data " + e.tostring()); } // return json string return jobj; } } }
mainactivity.java
public class mainactivity extends activity{ // url make request private static string url = "http://api.androidhive.info/contacts/"; // json node names private static final string tag_contacts = "contacts"; private static final string tag_id = "id"; private static final string tag_name = "name"; // contacts jsonarray jsonarray contacts = null; jsonobject json; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); new task().execute(); } public void loadareas(){ try { // looping through contacts for(int = 0; < contacts.length(); i++){ jsonobject c = contacts.getjsonobject(i); // storing each json item in variable string id = c.getstring(tag_id); string name = c.getstring(tag_name); log.e("tag","id: "+id+" - "+"name: "+name); } } catch (jsonexception e) { e.printstacktrace(); } } private class task extends asynctask<string, void, string> { @override protected string doinbackground(string... params) { try { // creating json parser instance jsonparser jparser = new jsonparser(); // getting json string url jsonobject json = jparser.getjsonfromurl(url); // getting array of contacts contacts = json.getjsonarray(tag_contacts); } catch (jsonexception e) { e.printstacktrace(); } return null; } @override protected void onpostexecute(string result) { loadareas(); } }
}
myjsondata
{ "contacts": [ { "id": "c200", "name": "ravi tamada", "email": "ravi@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "male", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c201", "name": "johnny depp", "email": "johnny_depp@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "male", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c202", "name": "leonardo dicaprio", "email": "leonardo_dicaprio@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "male", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c203", "name": "john wayne", "email": "john_wayne@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "male", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c204", "name": "angelina jolie", "email": "angelina_jolie@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "female", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c205", "name": "dido", "email": "dido@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "female", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c206", "name": "adele", "email": "adele@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "female", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c207", "name": "hugh jackman", "email": "hugh_jackman@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "male", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c208", "name": "will smith", "email": "will_smith@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "male", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c209", "name": "clint eastwood", "email": "clint_eastwood@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "male", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c2010", "name": "barack obama", "email": "barack_obama@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "male", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c2011", "name": "kate winslet", "email": "kate_winslet@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "female", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } }, { "id": "c2012", "name": "eminem", "email": "eminem@gmail.com", "address": "xx-xx-xxxx,x - street, x - country", "gender" : "male", "phone": { "mobile": "+91 0000000000", "home": "00 000000", "office": "00 000000" } } ] }
logcat
04-01 16:06:48.414: w/dalvikvm(9151): threadid=11: thread exiting uncaught exception (group=0x40d09930) 04-01 16:06:48.422: e/androidruntime(9151): fatal exception: asynctask #1 04-01 16:06:48.422: e/androidruntime(9151): java.lang.runtimeexception: error occured while executing doinbackground() 04-01 16:06:48.422: e/androidruntime(9151): @ android.os.asynctask$3.done(asynctask.java:299) 04-01 16:06:48.422: e/androidruntime(9151): @ java.util.concurrent.futuretask.finishcompletion(futuretask.java:352) 04-01 16:06:48.422: e/androidruntime(9151): @ java.util.concurrent.futuretask.setexception(futuretask.java:219) 04-01 16:06:48.422: e/androidruntime(9151): @ java.util.concurrent.futuretask.run(futuretask.java:239) 04-01 16:06:48.422: e/androidruntime(9151): @ android.os.asynctask$serialexecutor$1.run(asynctask.java:230) 04-01 16:06:48.422: e/androidruntime(9151): @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1080) 04-01 16:06:48.422: e/androidruntime(9151): @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:573) 04-01 16:06:48.422: e/androidruntime(9151): @ java.lang.thread.run(thread.java:856) 04-01 16:06:48.422: e/androidruntime(9151): caused by: java.lang.nullpointerexception 04-01 16:06:48.422: e/androidruntime(9151): @ com.example.json_parser.mainactivity$task.doinbackground(mainactivity.java:63) 04-01 16:06:48.422: e/androidruntime(9151): @ com.example.json_parser.mainactivity$task.doinbackground(mainactivity.java:1) 04-01 16:06:48.422: e/androidruntime(9151): @ android.os.asynctask$2.call(asynctask.java:287) 04-01 16:06:48.422: e/androidruntime(9151): @ java.util.concurrent.futuretask.run(futuretask.java:234) 04-01 16:06:48.422: e/androidruntime(9151): ... 4 more 04-01 16:06:48.461: d/libegl(9151): loaded /vendor/lib/egl/libegl_powervr_sgx540_120.so 04-01 16:06:48.476: d/libegl(9151): loaded /vendor/lib/egl/libglesv1_cm_powervr_sgx540_120.so 04-01 16:06:48.484: d/libegl(9151): loaded /vendor/lib/egl/libglesv2_powervr_sgx540_120.so 04-01 16:06:48.570: d/openglrenderer(9151): enabling debug mode 0 04-01 16:06:50.273: d/dalvikvm(9151): gc_concurrent freed 182k, 3% free 8885k/9100k, paused 3ms+23ms, total 41ms
that problem have?
i incorrectly returning json object?
thanks!
an asynctask, name implies, executes task asynchronously. means not block execution, so:
jsonparser jparser = new jsonparser(); // getting json string url jsonobject json = jparser.getjsonfromurl(url);
the value returning jparser.getjsonfromurl(url)
null. asynctask's doinbackground()
hasn't executed yet.
you need move parsing code doinbackground()
, move code updates ui onpostexecute()
.
Comments
Post a Comment