java - JsonReader Exception in Android while parsing large JSON data -


i getting exception when using jsonreader class in android while parsing large json data.

exception:

java.lang.illegalstateexception: expected name string 

the json data valid can't find out reason exception!

thanks lot!

my code :

    public void readjsonstream(inputstream in) throws ioexception {         jsonreader reader = new jsonreader(new inputstreamreader(in));          reader.setlenient(true);         try {             readjsonobject(reader);         } catch (exception e) {              system.out.println(e);         } {              reader.close();         }      }       // read json jsonreader class      public void readjsonobject(jsonreader reader) throws ioexception {          reader.beginobject();         while (reader.hasnext()) {              string name = reader.nextname();              system.out.println(name.equals("result"));             if (name.equals("result")) {                 reader.beginobject();                  while (reader.hasnext()) {                     string josnparser = reader.nextname();                      if (josnparser.equals(optionmaster)) { // optionmaster                         reader.beginarray();                          while (reader.hasnext()) {                              readjsonarray(reader);                         }                         reader.endarray();                     } else {                         reader.skipvalue();                     }                  }                 reader.endobject();              } else {                 reader.skipvalue();             }         }         reader.endobject();      }      public void readjsonarray(jsonreader reader) throws ioexception {          reader.beginobject();         while (reader.hasnext()) {              string name = reader.nextname();             system.out.println(name); // here exception ....           if (name.equals("om_id")&& reader.peek() != jsontoken.null) {               string om_id = reader.nextstring();      }          else if (name.equals("om_multiselect")&& reader.peek() != jsontoken.null) {                     string om_multiselect = reader.nextstring();      }          else if (name.equals("omlang_name")&& reader.peek() != jsontoken.null) {               string omlang_name = reader.nextstring();      }          else if (name.equals("om_createddate")&& reader.peek() != jsontoken.null) {               string om_createddate = reader.nextstring();      }          else          {  reader.skipvalue();  }           }          reader.endobject();      } 

and here's json data:

 {         "result": {  "options": [                 {                     "opt_id": "8",                     "opt_om_id": "3",                     "optlang_name": "test1"                 },                 {                     "opt_id": "9",                     "opt_om_id": "3",                     "optlang_name": "test"                 }             ],             "optionmaster": [                 {                     "om_id": "2",                     "om_multiselect": "n",                     "omlang_name": "style",                     "om_createddate": "2012-08-25 01:37:57"                 },                 {                     "om_id": "3",                     "om_multiselect": "y",                     "omlang_name": "test",                     "om_createddate": "2012-08-25 01:37:57"                 }             ]          }     } 

here sample code please review , parsed options array successfully, couldn't parse optionmaster error appears when trying parse "om_id"

logcat:

 05-21 17:39:54.833: w/system.err(1116): java.lang.illegalstateexception: expected name string   05-21 17:39:54.833: w/system.err(1116):    @ android.util.jsonreader.nextname(jsonreader.java:390)  05-21 17:39:54.843: w/system.err(1116):    @ com.test.jsonparser.readjsonarray(jsonparser.java:174)  05-21 17:39:54.843: w/system.err(1116):    @ com.test.jsonparser.readjsonobject(jsonparser.java:135)  05-21 17:39:54.843: w/system.err(1116):    @ com.test.jsonparser.readjsonstream(jsonparser.java:49)  05-21 17:39:54.843: w/system.err(1116):    @ com.test.itemlistactivity$apisynccontroller.doinbackground(itemlistactivity.java:149)   05-21 17:39:54.853: w/system.err(1116):    @ com.test.itemlistactivity$apisynccontroller.doinbackground(itemlistactivity.java:1)  05-21 17:39:54.853: w/system.err(1116):    @ android.os.asynctask$2.call(asynctask.java:287)   05-21 17:39:54.853: w/system.err(1116):    @ java.util.concurrent.futuretask.run(futuretask.java:234)   05-21 17:39:54.863: w/system.err(1116):    @ android.os.asynctask$serialexecutor$1.run(asynctask.java:230)   05-21 17:39:54.863: w/system.err(1116):    @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1080)   05-21 17:39:54.863: w/system.err(1116):    @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:573)  05-21 17:39:54.863: w/system.err(1116):    @ java.lang.thread.run(thread.java:856)........ 

i have concearn short circuit , check reader.peek not executing. reader.peek() check first go on ifs

if (reader.peek()!=jsontoken.null) {     if (name.equals("om_id")) {         string om_id = reader.nextstring();     } else if (name.equals("om_multiselect")) {               string om_multiselect = reader.nextstring();     } else if (name.equals("omlang_name")) {         string omlang_name = reader.nextstring();     } else if (name.equals("om_createddate")) {         string om_createddate = reader.nextstring();     } else {         reader.skipvalue();     } } 

good luck


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

java - Using an Integer ArrayList in Android -