FQL с использованием Android SDK facebook - PullRequest
2 голосов
/ 16 сентября 2010

Я пытаюсь создать приложение для Android, используя Android SDK для Facebook (http://github.com/facebook/facebook-android-sdk). Я пытаюсь выяснить, смогу ли я использовать FQL с помощью этого SDK. Если у кого-то есть опыт в этомпожалуйста, дайте мне знать.

FQL, по-видимому, можно использовать с помощью https://api.facebook.com/method/fql.query?query=QUERY, SDK Facebook android, однако, похоже, не поддерживает это.

Ответы [ 4 ]

8 голосов
/ 15 апреля 2011

Это, вероятно, лучший способ, чем упомянуто. Используя текущую версию API, вам не нужно вручную добавлять токен доступа или использовать 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" );
            ...
        }
2 голосов
/ 05 ноября 2010

Вот пример кода с использованием предложенного патча:

    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();
        }
1 голос
/ 27 января 2013

Вот мое решение:

Что вам действительно нужно сделать, это использовать graphPathRequest. В Android SDK уже предусмотрено 2 версии, одна из которых - метод быстрого выполнения. Другой - сделать запрос и изменить его, прежде чем вызывать execute для такого объекта запроса. Мой метод использовать более позднюю версию.

Если вы находитесь в пределах FacebookActivity, просто позвоните:

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

Надеюсь, это поможет.

Обратите внимание, что я использую AndroidSDK 3.0

0 голосов
/ 25 октября 2010

Похоже, что Android Facebook SDK не кодирует URL-адреса параметров старого API REST.Поэтому, когда вы отправляете большой запрос FQL, он не может обрабатывать все пробелы и специальные символы.Я, вероятно, положу ответвление на github, который исправит это, но пока вы можете изменить строку 26 в com.facebook.android.Util на:

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

Обратите внимание на вызов URLEncoder.На самом деле это устаревшая версия метода, но пока она будет работать нормально, я добавлю правильную, когда нажму на github.

...