Android Gson.fromJson error -
i've completed tutorial how connect json url , parse content using gson library. code works fine url specified in tutorial, tryed modify work this url. tryed display 1 field second ulr, base field, can't work. here code, please help:
public class jsonparsingactivity extends activity { string url = "http://api.openweathermap.org/data/2.5/weather?q=london,uk"; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); inputstream source = retrievestream(url); gson gson = new gson();// main gson class reader reader = new inputstreamreader(source); searchresponse response = gson.fromjson(reader, searchresponse.class); //gson.fromjson(string, class) toast.maketext(this, response.base, toast.length_short).show(); } private inputstream retrievestream(string url) { defaulthttpclient client = new defaulthttpclient(); httpget getrequest = new httpget(url); try { httpresponse getresponse = client.execute(getrequest); final int statuscode = getresponse.getstatusline().getstatuscode(); if (statuscode != httpstatus.sc_ok) { log.w(getclass().getsimplename(), "error " + statuscode + " url " + url); return null; } httpentity getresponseentity = getresponse.getentity(); return getresponseentity.getcontent(); } catch (ioexception e) { getrequest.abort(); log.w(getclass().getsimplename(), "error url " + url, e); } return null; } }
and searchresponse class:
public class searchresponse { @serializedname("base") public string base; }
log file:
05-21 14:11:35.559: e/androidruntime(15079): fatal exception: main 05-21 14:11:35.559: e/androidruntime(15079): java.lang.runtimeexception: unable start activity componentinfo{com.example.myproject/com.example.myproject.jsonparsingactivity}: java.lang.illegalargumentexception: expected class, parameterizedtype, or genericarraytype, <com.example.myproject.jsonparsingactivity$1@405494a8> of type com.example.myproject.jsonparsingactivity$1 05-21 14:11:35.559: e/androidruntime(15079): @ android.app.activitythread.performlaunchactivity(activitythread.java:1651) 05-21 14:11:35.559: e/androidruntime(15079): @ android.app.activitythread.handlelaunchactivity(activitythread.java:1667) 05-21 14:11:35.559: e/androidruntime(15079): @ android.app.activitythread.access$1500(activitythread.java:117) 05-21 14:11:35.559: e/androidruntime(15079): @ android.app.activitythread$h.handlemessage(activitythread.java:935) 05-21 14:11:35.559: e/androidruntime(15079): @ android.os.handler.dispatchmessage(handler.java:99) 05-21 14:11:35.559: e/androidruntime(15079): @ android.os.looper.loop(looper.java:123) 05-21 14:11:35.559: e/androidruntime(15079): @ android.app.activitythread.main(activitythread.java:3687) 05-21 14:11:35.559: e/androidruntime(15079): @ java.lang.reflect.method.invokenative(native method) 05-21 14:11:35.559: e/androidruntime(15079): @ java.lang.reflect.method.invoke(method.java:507) 05-21 14:11:35.559: e/androidruntime(15079): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:867) 05-21 14:11:35.559: e/androidruntime(15079): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:625) 05-21 14:11:35.559: e/androidruntime(15079): @ dalvik.system.nativestart.main(native method) 05-21 14:11:35.559: e/androidruntime(15079): caused by: java.lang.illegalargumentexception: expected class, parameterizedtype, or genericarraytype, <com.example.myproject.jsonparsingactivity$1@405494a8> of type com.example.myproject.jsonparsingactivity$1 05-21 14:11:35.559: e/androidruntime(15079): @ com.google.gson.internal.$gson$types.getrawtype($gson$types.java:145) 05-21 14:11:35.559: e/androidruntime(15079): @ com.google.gson.reflect.typetoken.<init>(typetoken.java:73) 05-21 14:11:35.559: e/androidruntime(15079): @ com.google.gson.reflect.typetoken.get(typetoken.java:296) 05-21 14:11:35.559: e/androidruntime(15079): @ com.google.gson.gson.fromjson(gson.java:801) 05-21 14:11:35.559: e/androidruntime(15079): @ com.google.gson.gson.fromjson(gson.java:768) 05-21 14:11:35.559: e/androidruntime(15079): @ com.example.myproject.jsonparsingactivity.oncreate(jsonparsingactivity.java:42) 05-21 14:11:35.559: e/androidruntime(15079): @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1047) 05-21 14:11:35.559: e/androidruntime(15079): @ android.app.activitythread.performlaunchactivity(activitythread.java:1615) 05-21 14:11:35.559: e/androidruntime(15079): ... 11 more 05-21 14:11:44.729: e/androidruntime(15160): fatal exception: main 05-21 14:11:44.729: e/androidruntime(15160): java.lang.runtimeexception: unable start activity componentinfo{com.example.myproject/com.example.myproject.jsonparsingactivity}: java.lang.illegalargumentexception: expected class, parameterizedtype, or genericarraytype, <com.example.myproject.jsonparsingactivity$1@40547490> of type com.example.myproject.jsonparsingactivity$1 05-21 14:11:44.729: e/androidruntime(15160): @ android.app.activitythread.performlaunchactivity(activitythread.java:1651) 05-21 14:11:44.729: e/androidruntime(15160): @ android.app.activitythread.handlelaunchactivity(activitythread.java:1667) 05-21 14:11:44.729: e/androidruntime(15160): @ android.app.activitythread.access$1500(activitythread.java:117) 05-21 14:11:44.729: e/androidruntime(15160): @ android.app.activitythread$h.handlemessage(activitythread.java:935) 05-21 14:11:44.729: e/androidruntime(15160): @ android.os.handler.dispatchmessage(handler.java:99) 05-21 14:11:44.729: e/androidruntime(15160): @ android.os.looper.loop(looper.java:123) 05-21 14:11:44.729: e/androidruntime(15160): @ android.app.activitythread.main(activitythread.java:3687) 05-21 14:11:44.729: e/androidruntime(15160): @ java.lang.reflect.method.invokenative(native method) 05-21 14:11:44.729: e/androidruntime(15160): @ java.lang.reflect.method.invoke(method.java:507) 05-21 14:11:44.729: e/androidruntime(15160): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:867) 05-21 14:11:44.729: e/androidruntime(15160): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:625) 05-21 14:11:44.729: e/androidruntime(15160): @ dalvik.system.nativestart.main(native method) 05-21 14:11:44.729: e/androidruntime(15160): caused by: java.lang.illegalargumentexception: expected class, parameterizedtype, or genericarraytype, <com.example.myproject.jsonparsingactivity$1@40547490> of type com.example.myproject.jsonparsingactivity$1 05-21 14:11:44.729: e/androidruntime(15160): @ com.google.gson.internal.$gson$types.getrawtype($gson$types.java:145) 05-21 14:11:44.729: e/androidruntime(15160): @ com.google.gson.reflect.typetoken.<init>(typetoken.java:73) 05-21 14:11:44.729: e/androidruntime(15160): @ com.google.gson.reflect.typetoken.get(typetoken.java:296) 05-21 14:11:44.729: e/androidruntime(15160): @ com.google.gson.gson.fromjson(gson.java:801) 05-21 14:11:44.729: e/androidruntime(15160): @ com.google.gson.gson.fromjson(gson.java:768) 05-21 14:11:44.729: e/androidruntime(15160): @ com.example.myproject.jsonparsingactivity.oncreate(jsonparsingactivity.java:42) 05-21 14:11:44.729: e/androidruntime(15160): @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1047) 05-21 14:11:44.729: e/androidruntime(15160): @ android.app.activitythread.performlaunchactivity(activitythread.java:1615) 05-21 14:11:44.729: e/androidruntime(15160): ... 11 more
i've never tried deserialize reader using gson, i've had luck jsonelement.
httpurlconnection connection = null; jsonelement jsonresponse = null; try { // create connection string url = "http://someplace"; url endpoint = new url(url); connection = (httpurlconnection) endpoint.openconnection(); // fetch data server jsonreader reader = new jsonreader(new inputstreamreader(connection.getinputstream())); jsonparser parser = new jsonparser(); jsonresponse = parser.parse(reader); // parse response gson gson = new gson(); yourresponseclass response; try { response = gson.fromjson(jsonresponse, yourresponseclass.class); } catch (jsonsyntaxexception e) { } // object } catch (exception e) { } { // close connection if it's open if (connection != null) { connection.disconnect(); } } ...
your deserialized class seems ok @ first glance, remember when deserializing gson, types in destination class must match json, e.g. arrays, primitive types, etc.
Comments
Post a Comment