2012-12-13 3 views
6

Die aktuelle Facebook-API v3.0.2.b gibt ein com.facebook.Response-Objekt zurück, das die Antwort enthält. Weißt du wie man das analysiert? Der folgende Code wird eine Ausnahme ausgelöst :(Umgang mit dem Antwortobjekt der Android Facebook-API

//execute the request 
Request request = new Request 
(
    session, 
    "/fql", 
    params, 
    HttpMethod.GET, 
    new Request.Callback() 
    { 
     @Override 
     public void onCompleted(Response response) 
     { 
      try 
      { 
       JSONArray json = new JSONArray(response.toString()); 
      } 
      catch (Throwable t) 
      { 
       System.err.println(t); 
      } 
     } 
    } 
); 
Request.executeBatchAsync(request); 

Die Fehlermeldung lautet:

org.json.JSONException: Unterminated object at character 25 of {Response: responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[{"pic_square":..... 

Weiß jemand, was die richtige Lösung ist: Soll ich

GraphObject go = response.getGraphObject(); 

verwenden .. wie kann Ich bekomme GraphUser-Objekte damit?

Sorry, das scheint wie ein triviales Problem, aber Verarbeitung der Antwort-Objekt ist in den Facebook-Dokumenten schlecht dokumentiert und ich konnte nichts davon im Internet erhalten :(

Vielen Dank im Voraus!

Grüße Christopher

+0

Try Wert von 'response.responseCode' zu ​​sehen, in der' onCompleted' Methode. Kannst du dort 200 sehen? –

+0

Hallo Pratik, Danke für Ihre Antwort. Ja - Der Code ist 200 und inzwischen habe ich dieses Problem gelöst :) Ich würde gerne meine Lösung posten, aber ich kann meine eigenen Fragen noch nicht beantworten :( –

+0

Toll, dass Sie Ihr Problem lösen. Ich denke, Sie bekommen Antwort als Objekt nur so keine Notwendigkeit zu konvertieren in Zeichenfolge wie diese "response.toString()". Das ist, was ich mit "response.responseCode" überprüfen möchten. –

Antwort

31

dies die Lösung, die für mich gearbeitet - Ich hatte die Antwort und spielen, um ein wenig mit einigen Methoden zu untersuchen, aber schließlich gelöst es :)

/************************************************************************ 
* Parses the user data from the facebook FQL 
* 
* "SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())" 
* 
* This is the example query from 
* {@link http://developers.facebook.com/docs/howtos/androidsdk/3.0/run-fql-queries/} 
* 
* @param response The facebook response from the FQL 
************************************************************************/ 
public static final void parseUserFromFQLResponse(Response response) 
{ 
    try 
    { 
     GraphObject go = response.getGraphObject(); 
     JSONObject jso = go.getInnerJSONObject(); 
     JSONArray arr = jso.getJSONArray("data"); 

     for (int i = 0; i < (arr.length()); i++) 
     { 
      JSONObject json_obj = arr.getJSONObject(i); 

      String id  = json_obj.getString("uid"   ); 
      String name = json_obj.getString("name"   ); 
      String urlImg = json_obj.getString("pic_square" ); 

      //... 

     } 
    } 
    catch (Throwable t) 
    { 
     t.printStackTrace(); 
    } 
} 

this helps irgendjemand eines Tages.

Grüße

Christopher

UPDATE

Graph ist nicht mehr eine Klasse, so einfach:

JSONObject jso = response.getJSONObject(); 
JSONArray arr = jso.getJSONArray("data"); 
Verwandte Themen