BlackBerry read json string from an URL -
i tried read json string loading url, not find complete code sample. can 1 provide or point me complete client code. i'm newer bb development.
this have done still can't work please me.
thanks!
to read , parse data url need implement 2 routines. first 1 of them handle reading data specified url on http connection, , second 1 parse data.
check following application httpurlreaderdemoapp, first read data specified url , parse retrieved data.
- url used retrieve data: http://codeincloud.tk/json_android_example.php
- sample data format:
{"name":"froyo", "version":"android 2.2"}
classes:
- httpurlreaderdemoapp - uiapplication instance
- httpresponselistener - interface used notify other classes http request status
- httpurlreader - reads data given url
- appmainscreen - mainscreen instance
- dataparser - parse data
- datamodel - data definition
screenshots:
request data
when data retrieved successfully
parsed data
implementation:
httpurlreaderdemoapp
public class httpurlreaderdemoapp extends uiapplication { public static void main(string[] args) { httpurlreaderdemoapp theapp = new httpurlreaderdemoapp(); theapp.entereventdispatcher(); } public httpurlreaderdemoapp() { pushscreen(new appmainscreen("http url reader demo application")); } }
httpresponselistener
public interface httpresponselistener { public void onhttpresponsefail(string message, string url); public void onhttpresponsesuccess(byte bytes[], string url); }
httpurlreader
public class httpurlreader implements runnable { private string url; private httpresponselistener listener; public httpurlreader(string url, httpresponselistener listener) { this.url = url; this.listener = listener; } private string getconncetiondependenturlsuffix() { // not implemented return ""; } private void notifysuccess(byte bytes[], string url) { if (listener != null) { listener.onhttpresponsesuccess(bytes, url); } } private void notifyfailure(string message, string url) { if (listener != null) { listener.onhttpresponsefail(message, url); } } private boolean isvalidurl(string url) { return (url != null && url.length() > 0); } public void run() { if (!isvalidurl(url) || listener == null) { string message = "invalid parameters."; message += !isvalidurl(url) ? " invalid url." : ""; message += (listener == null) ? " invalid httpresponselisterner instance." : ""; notifyfailure(message, url); return; } // update url depending on connection type url += deviceinfo.issimulator() ? ";deviceside=true" : getconncetiondependenturlsuffix(); // open connection , retrieve data try { httpconnection httpconn = (httpconnection) connector.open(url); int status = httpconn.getresponsecode(); if (status == httpconnection.http_ok) { inputstream input = httpconn.openinputstream(); byte[] bytes = ioutilities.streamtobytes(input); input.close(); notifysuccess(bytes, url); } else { notifyfailure("failed retrieve data, http response code: " + status, url); return; } httpconn.close(); } catch (exception e) { notifyfailure("failed retrieve data, exception: ", e.tostring()); return; } } }
appmainscreen
public class appmainscreen extends mainscreen implements httpresponselistener { private final string url = "http://codeincloud.tk/json_android_example.php"; public appmainscreen(string title) { settitle(title); } private menuitem mireaddata = new menuitem("read data", 0, 0) { public void run() { requestdata(); } }; protected void makemenu(menu menu, int instance) { menu.add(mireaddata); super.makemenu(menu, instance); } public void close() { super.close(); } public void showdialog(final string message) { uiapplication.getuiapplication().invokelater(new runnable() { public void run() { dialog.alert(message); } }); } private void requestdata() { thread urlreader = new thread(new httpurlreader(url, this)); urlreader.start(); showdialog("request data from\n \"" + url + "\"\n started."); } public void onhttpresponsefail(string message, string url) { showdialog("failure mesage:\n" + message + "\n\nurl:\n" + url); } public void onhttpresponsesuccess(byte bytes[], string url) { showdialog("data retrived from:\n" + url + "\n\ndata:\n" + new string(bytes)); // parse response datamodel datamodel = dataparser.getdata(bytes); if (datamodel == null) { showdialog("failed parse data: " + new string(bytes)); } else { showdialog("parsed data:\nname: " + datamodel.getname() + "\nversion: " + datamodel.getversion()); } } }
dataparser
public class dataparser { private static final string name = "name"; private static final string version = "version"; public static datamodel getdata(byte data[]) { string rawdata = new string(data); datamodel datamodel = new datamodel(); try { jsonobject jsonobj = new jsonobject(rawdata); if (jsonobj.has(name)) { datamodel.setname(jsonobj.getstring(name)); } if (jsonobj.has(version)) { datamodel.setversion(jsonobj.getstring(version)); } } catch (exception e) { e.printstacktrace(); return null; } return datamodel; } }
datamodel
public class datamodel { private string name; private string version; public string getname() { return name; } public void setname(string name) { this.name = name; } public string getversion() { return version; } public void setversion(string model) { this.version = model; } }
Comments
Post a Comment