如何在Android中从Facebook获取所有照片

时间:2014-12-11 12:41:34

标签: android facebook facebook-graph-api

我正在开发一个应用程序,其中我使用Facebook SDK用于不同目的。目前我已通过Facebook实施登录。现在我的下一个任务是获取登录用户的所有照片并在网格中显示所有这些照片。我关注官方的Facebook开发者网站作为此任务的参考。以下是我用来获取用户照片的代码。

    new Request(
            Session.getActiveSession(),
            "/me/photos",
            getRequestParameters(),
            HttpMethod.GET,
            new Request.Callback() {
                public void onCompleted(Response response) {
                    /* handle the result */
                    Log.d("Response ","Response " + response);
                    mpBar.setVisibility(View.GONE);
                }
            }
        ).executeAsync();

private Bundle getRequestParameters() 
    {
        String accessToken = LoginSigbUpCustomerNew.mytoken;
           Bundle parameters = new Bundle(1);
           parameters.putString("access_token", accessToken);
           return parameters;
    }

在这里,我得到这样的回应: -

{Response:  responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[]}}, error: null, isFromCache:false}

我无法理解为什么数据数组是空的。我也要求用户提供user_photos权限。那么事情是错的。 我是这个Facebook SDK的新手,不知道如何解决这个问题。如果有人能帮助我,那就太棒了。

提前致谢。

2 个答案:

答案 0 :(得分:1)

根据Facebook SDK的文档,您的照片请求代码很好但我认为您忘记请求已登录用户的许可(在这种情况下)。

从Facebook SDK文档复制:A user access token with user_photos permission is required to see all photos that person is tagged in or has uploaded.

以下链接为您提供了一个关于如何向登录按钮添加访问令牌的小教程:https://developers.facebook.com/docs/android/login-with-facebook/v2.2?locale=en_GB#step3

在你的情况下它会是(代码片段仅用于活动,对于片段:点击上面的url并按照那里的教程。非常直接):

...
LoginButton authButton = (LoginButton) findViewById(R.id.ID_OF_YOUR_LOGIN_BUTTON);
authButton.setReadPermissions(Arrays.asList("user_photos"));
...

在你的重写onCreate方法。


方法二:

...
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
    session.openForRead(new Session.OpenRequest(this)
        .setPermissions(Arrays.asList("user_photos"))
        .setCallback(YOUR_CALLBACK_CLASS_VARIABLE));
} else {
    // Open an active session. Basically happens when someone is already logged in.
}
...

在拨打电话请求所有用户照片之前,您只需在用户尚未登录时打开新请求即可。这可能发生在View.OnClickListener的{​​{1}}类中,因为您似乎不是Facebook的LoginButton。

Button是实现Session.StatusCallback的类。我很确定你知道它是什么以及它做了什么。


方法三:

YOUR_CALLBACK_CLASS_VARIABLE

当用户已登录时(所以在用户登录后)并且您希望从用户请求其他权限来访问他的照片或其他任何内容。顺便说一下,所有这些都是在Facebook SDK for Android的文档中编写的。

有关详细信息:https://developers.facebook.com/docs/android/login-with-facebook/v2.2?locale=en_GB#step3

答案 1 :(得分:1)

如果请求返回空结果,请检查使用的访问令牌是否包含user_photos权限:

您可以通过

检查Acces令牌

请求:

GET /debug_token?
 input_token={input-token}&
 access_token={access-token}