我正尝试使用facebook安卓SDK(http://github.com/facebook/facebook-android-sdk)创建一个安卓应用程序。我试图找出是否可以使用此SDK使用FQL。如果有人在这方面有任何经验,请告诉我。使用Facebook的安卓客户端软件开发工具包(SDK)
FQL明显可以使用https://api.facebook.com/method/fql.query?query=QUERY,但facebook android SDK似乎并不支持这一点。
谢谢;
我正尝试使用facebook安卓SDK(http://github.com/facebook/facebook-android-sdk)创建一个安卓应用程序。我试图找出是否可以使用此SDK使用FQL。如果有人在这方面有任何经验,请告诉我。使用Facebook的安卓客户端软件开发工具包(SDK)
FQL明显可以使用https://api.facebook.com/method/fql.query?query=QUERY,但facebook android SDK似乎并不支持这一点。
谢谢;
它看起来像Android Facebook SDK不会对旧的REST API的参数进行URL编码。所以当你发送一个大的FQL查询时,它不能处理所有的空格和特殊字符。我可能把叉子了GitHub上修复此,但在此期间,你可以在com.facebook.android.Util第26行改为:
sb.append(key + "=" + URLEncoder.encode(parameters.getString(key)));
通知的URLEncoder的通话那里。这实际上是该方法的不赞成使用的版本,但它现在可以正常工作,当我推送到github时,我会包含正确的版本。
下面是使用建议的补丁一些示例代码:
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();
}
,这大概比提到一个更好的办法。使用当前版本的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");
...
}
这里是我的解决方案:
你真正需要做的是使用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
SdK 4中缺少请求。 – 2015-11-29 00:14:11
什么是$ fb这里? – 2015-11-28 03:27:57