2010-09-16 6 views
2

Je suis en train de créer une application Android en utilisant le Facebook SDK Android (http://github.com/facebook/facebook-android-sdk). J'essaie de comprendre si je serai capable d'utiliser FQL en utilisant ce SDK. Si quelqu'un a des expériences à ce sujet, s'il vous plaît faites le moi savoir.FQL en utilisant Facebook android SDK

FQL peut apparemment être utilisé en utilisant https://api.facebook.com/method/fql.query?query=QUERY, le Facebook SDK Android ne semble cependant pas le soutenir.

Merci;

Répondre

0

Il semble que le SDK Android Android ne code pas les paramètres de l'ancienne API REST. Ainsi, lorsque vous envoyez une grande requête FQL, elle ne peut pas gérer tous les espaces et caractères spéciaux. Je vais probablement mettre une fourchette sur github qui corrige ce problème, mais en attendant, vous pouvez changer de ligne 26 com.facebook.android.Util à:

sb.append(key + "=" + URLEncoder.encode(parameters.getString(key))); 

Notez l'appel URLEncoder là. C'est en fait la version obsolète de la méthode, mais cela fonctionnera très bien pour l'instant, je vais inclure le bon quand je pousse à github.

2

Voici quelques exemples de code utilisant le patch suggéré:

Bundle b = new Bundle(); 
    b.putString("access_token", facebookManager.mFacebook.getAccessToken()); 
    b.putString("query", "SELECT name FROM user WHERE uid = me()"); 

    try { 
     String myResult = Util.openUrl("https://api.facebook.com/method/fql.query", "GET", b); 
      Log.i("MyResult", myResult); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
8

Ceci est probablement une meilleure façon que mentionné. En utilisant la version actuelle de l'API, vous n'avez pas besoin d'ajouter manuellement le jeton d'accès ou d'utiliser Util.openURL.

 Bundle params = new Bundle(); 
     params.putString("method", "fql.query"); 
     params.putString("query", "SELECT name, uid, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me()) ORDER BY name"); 
     String response = $fb.request(params); 
     response = "{\"data\":" + response + "}"; 

     JSONObject json = Util.parseJson(response); 
     JSONArray data = json.getJSONArray("data"); 

     for (int i = 0, size = data.length(); i < size; i++){ 
      JSONObject friend = data.getJSONObject(i); 

      String id = friend.getString("uid"); 
      String name = friend.getString("name"); 
      ... 
     } 
+0

Qu'est-ce que $ fb ici? –

1

Voici ma solution:

Qu'est-ce que vous avez vraiment besoin de faire est d'utiliser un graphPathRequest. Dans android SDK, il est déjà fourni 2 versions de celui-ci est la méthode d'exécution rapide. Une autre consiste à faire une demande et à modifier cette requête avant de lancer l'appel sur cet objet de requête. Ma méthode utilise la version ultérieure.

Si vous êtes à FacebookActivity, appelez simplement:

Request r = new Request.newGraphPathRequest(getSession(), "fql", 
    new Request.Callback() { 
     @Override 
     public void onCompleted(Response response) { 
      // your FQL result will be stored in response.getGraphObject() 
      Log.d("result", response.toString()); 
     } 
    } 
); 
r.getParameters().putString("q", YOUR_QUERY_HERE); 
r.executeAsync(); 

Hope this helps.

Notez que j'utilise AndroidSDK 3.0

+0

La requête est manquante dans SdK 4. –

Questions connexes