【问题标题】:FQL using facebook android SDK使用 facebook android SDK 的 FQL
【发布时间】:2010-09-16 17:46:36
【问题描述】:
【问题讨论】:
标签:
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
【解决方案4】:
Android Facebook SDK 似乎没有对旧 REST api 的参数进行 URL 编码。因此,当您发送大型 FQL 查询时,它无法处理所有空格和特殊字符。我可能会在 github 上放一个叉子来解决这个问题,但与此同时,您可以将 com.facebook.android.Util 中的第 26 行更改为:
sb.append(key + "=" + URLEncoder.encode(parameters.getString(key)));
注意那里的 URLEncoder 调用。这实际上是该方法的弃用版本,但它现在可以正常工作,我会在推送到 github 时包含正确的版本。