古いバージョンのSDKでこの問題に関する多くの回答を見ましたが、なぜこれが私に起こっているのか理解できないようです。
このコードを使用すると、完全に機能します。
String QUERY = "select uid, name, pic_square, is_app_user from user where uid in (select uid2 from friend where uid1 = me())";
protected void getFacbookFirends() {
Bundle params = new Bundle();
params.putString("q", QUERY);
final Request req = new Request(getSession(), "/fql", params, HttpMethod.GET, fbCallback);
runOnUiThread(new Runnable() {
@Override
public void run() {
Request.executeBatchAsync(req);
}
});
}
しかし、これは非常に醜いので、代わりにこれを使用してみました:
Session session = Session.getActiveSession();
if (session == null) {
session = new Session(getActivity());
}
if (session != null && session.isOpened()) {
Request req = Request.newGraphPathRequest(session, "/me/friends?fields=id,name,installed,picture",
new Callback() {
@Override
public void onCompleted(Response response) {
Log.w("FriendsListFragment.Facebook.onComplete", response.toString());
}
});
Request.executeBatchAsync(req);
}
私の理解では、これはまったく同じリクエストであり、まったく同じ方法で実行する必要がありますが、必要な応答を取得する代わりに、次のResponse
オブジェクトを取得します。
{Response:
responseCode: 400,
graphObject: null,
error: {FacebookServiceErrorException:
httpResponseCode: 400,
facebookErrorCode: 2500,
facebookErrorType: OAuthException,
message: An active access token must be used to query information about the current user.
},
isFromCache:false
}
これをうまく機能させる方法について何か考えはありますか?
編集:
このコードを実行してみましたが、それでも同じ結果が得られました。
Request req = new Request(session, "/me/friends?fields=id,name,installed,picture",null, HttpMethod.GET,
new Callback() {
@Override
public void onCompleted(Response response) {
Log.w("FriendsListFragment.Facebook.onComplete", response.toString());
}
});
Request.executeBatchAsync(req);