2012-12-13 17 views
6

Obecny interfejs API Facebooka v3.0.2.b zwróci obiekt com.facebook.Response zawierający odpowiedź. Czy wiesz, jak to przeanalizować? Poniższy kod rzuci wyjątek :(Obsługa obiektu odpowiedzi interfejsu API Facebooka Facebook

//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); 

Komunikat o błędzie mówi:?

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

Czy ktoś wie co to jest poprawne rozwiązanie będę używał

GraphObject go = response.getGraphObject(); 

.. jak można Dostaję GraphUser-Objects z tym?

Niestety, wydaje się to banalnym problemem, ale przetwarzanie Obiekt odpowiedzi jest słabo udokumentowany w dokumentach na Facebooku i nie mogłem nic o tym powiedzieć w Internecie :(

Dziękuję bardzo z góry!

Pozdrowienia Christopher

+0

spróbować zobaczyć wartość 'response.responseCode' w swój' metoda onCompleted'. Czy widzisz tam 200? –

+0

Witam Pratik, Dziękuję za odpowiedź. Tak - kod to 200, a tymczasem rozwiązałem ten problem :) Chciałbym opublikować moje rozwiązanie, ale nie mogę jeszcze odpowiedzieć na moje własne pytania :( –

+0

Świetnie, że rozwiązujesz swój problem. Odpowiedź tylko jako obiekt, więc nie trzeba konwertować w łańcuchu, jak ta 'response.toString()'. To właśnie chcę sprawdzić za pomocą 'response.responseCode'. –

Odpowiedz

31

Jest to rozwiązanie, które pracował dla mnie - musiałem zbadać reakcję i poeksperymentować trochę z niektórych metod, ale w końcu rozwiązany :)

/************************************************************************ 
* 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(); 
    } 
} 

nadzieję, że to pomaga ktokolwiek kiedyś.

Pozdrowienia

Christopher

UPDATE

GraphObject nie jest klasą, więc po prostu:

JSONObject jso = response.getJSONObject(); 
JSONArray arr = jso.getJSONArray("data"); 
Powiązane problemy