我正嘗試使用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