plusone

8. Mai 2012

Android Objekte für JSON

Guten Abend meine wissenshungrigen Freunde und Feinde,

heute am Tag der Befreiung will ich euch die Android-Objekte für JSON zeigen.
Im einzelnen geht es um JSONTokener, JSONArray, JSONObject, also dem org.json-Package.

Für dieses Tutorial solltet ihr Wissen aus meinen Beiträgen über das Einbinden von Facebook-API und das Auslesen von JSON aus externen Quellen.

Beginnen wir erst mit dem Beschaffen vom JSON-String, als Beispiel dient uns die Pinnwand von Facebook.
Facebook authenticatedFacebook = new Facebook("****************"); //Benutzt hier eure Facebook-APP-ID

//Vergewissert euch, dass ihr euch vorher eingeloggt habt!
//mein einfaches Beispiel für APP registrieren
//und Login findet ihr HIER
String response = null;
try {
    response = authenticatedFacebook.request("me/home");
   
} catch (MalformedURLException e) {
    e.printStackTrace();
   
} catch (IOException e) {
    e.printStackTrace();
}
Der Pfad me/home entpricht eurer Pinnwand. Als response bekommt ihr paar Einträge aus eurer Pinnwand.

Meine etwas geschwärzte LogCat-Ausgabe :

Hier ein gekürzter Ausschnitt:
{"data":[{"id":"*","from":{"name":"*","id":"*"},"message":"*","picture":"*"}]}
Geschweifte Klammern "{" beinhalten ein Objekt und die eckigen Klammern "[" ein Array.
Mit dem Schlüssel data bekommen wir ein Array. An der ersten Stelle des Arrays, steht ein Objekt, das die Variablen id, from, message und picture haben.

So die trockene Theorie. Im Quellcode sieht es so aus:
JSONTokener jsonTokener = new JSONTokener(response);//Initial-Objekt
while (jsonTokener.more()) {
    JSONObject nextValue;
    JSONArray data = null;
    try {
        nextValue = (JSONObject) jsonTokener.nextValue();
        data = nextValue.getJSONArray("data");//Array

            JSONObject object = (JSONObject) data.get(0);
           
            object.optString("id"); //ID des Posts
            JSONObject from = object.getJSONObject("from");
            object.optString("message"); //Nachricht
            object.optString("picture"); //Link zum Bild
           
            from.optString("id"); //ID des Users
            from.optString("name"); //Name des Users
           
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
Der Unterschied zwischen optString und getString liegt in der Reaktion auf nicht vorhandere Keys. optString liefert null zurück, während getString eine Exception auslöst.

Wegen der Unicodeformatierung, die ihr im Screenshot meiner LogCat-Ausgabe seht... solange ich die JSON-Objekte aus dem org.json benutzt habe, hatte ich keine Probleme! :)

Wie ihr seht, ist es kein Hexenwerk. Und mit diesem Wissen, könnt ihr auch schon eure eigenen APPs unter Android in Kombination mit Facebook entwickelt.

Ich wünsche euch viel Erfolg und verabschiede mich mit dieser Antwort für die bis gerade ausstehenden Frage von Stefan.

regards
Alexander Fink

1 Kommentar:

Kommentar veröffentlichen