【问题标题】:FQL using facebook android SDK使用 facebook android SDK 的 FQL
【发布时间】:2010-09-16 17:46:36
【问题描述】:

我正在尝试使用 facebook android SDK (http://github.com/facebook/facebook-android-sdk) 创建一个 android 应用程序。我试图弄清楚我是否能够使用这个 SDK 使用 FQL。如果有人有这方面的经验,请告诉我。

显然可以使用https://api.facebook.com/method/fql.query?query=QUERY 使用 FQL,但 facebook android SDK 似乎不支持这一点。

谢谢;

【问题讨论】:

    标签: android facebook sdk facebook-fql


    【解决方案1】:

    这可能是比提到的更好的方法。使用当前版本的 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】:

      下面是一些使用建议补丁的示例代码:

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

      【讨论】:

        【解决方案3】:

        这是我的解决方案:

        您真正需要做的是使用graphPathRequest。在 android SDK 中,它已经提供了 2 个版本,一个是快速执行方法。另一种方法是在对此类请求对象调用执行之前发出请求并修改该请求。我的方法使用更高版本。

        如果您在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

        【讨论】:

        • SdK 4 中缺少请求。
        【解决方案4】:

        Android Facebook SDK 似乎没有对旧 REST api 的参数进行 URL 编码。因此,当您发送大型 FQL 查询时,它无法处理所有空格和特殊字符。我可能会在 github 上放一个叉子来解决这个问题,但与此同时,您可以将 com.facebook.android.Util 中的第 26 行更改为:

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

        注意那里的 URLEncoder 调用。这实际上是该方法的弃用版本,但它现在可以正常工作,我会在推送到 github 时包含正确的版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多