我正在尝试使用 facebook android SDK ( http://github.com/facebook/facebook-android-sdk ) 创建一个 android 应用程序。我试图弄清楚我是否能够使用这个 SDK 使用 FQL。如果有人有这方面的经验,请告诉我。
FQL 显然可以使用https://api.facebook.com/method/fql.query?query=QUERY,但 facebook android SDK 似乎不支持这一点。
谢谢;
我正在尝试使用 facebook android SDK ( http://github.com/facebook/facebook-android-sdk ) 创建一个 android 应用程序。我试图弄清楚我是否能够使用这个 SDK 使用 FQL。如果有人有这方面的经验,请告诉我。
FQL 显然可以使用https://api.facebook.com/method/fql.query?query=QUERY,但 facebook android SDK 似乎不支持这一点。
谢谢;
这可能是比提到的更好的方法。使用当前版本的 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" );
...
}
以下是使用建议补丁的一些示例代码:
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();
}
这是我的解决方案:
您真正需要做的是使用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
看起来 Android Facebook SDK 没有对旧 REST api 的参数进行 URL 编码。因此,当您发送大型 FQL 查询时,它无法处理所有空格和特殊字符。我可能会在 github 上放一个叉子来解决这个问题,但与此同时,您可以将 com.facebook.android.Util 中的第 26 行更改为:
sb.append(key + "=" + URLEncoder.encode(parameters.getString(key)));
注意那里的 URLEncoder 调用。这实际上是该方法的弃用版本,但它现在可以正常工作,当我推送到 github 时,我会包含正确的版本。