Facebook用户专辑使用最新的facebook SDK进行图片分页?

时间:2016-01-07 12:19:24

标签: android facebook facebook-graph-api pagination

我必须在其中获得用户专辑和整个图像。到目前为止我做了什么。

第1步:获取用户相册详细信息

 Bundle parameters = new Bundle();
        parameters.putString("fields", "id,name,picture.type(album),count");
        new GraphRequest(
                AccessToken.getCurrentAccessToken(),  //your fb AccessToken
                "/" + AccessToken.getCurrentAccessToken().getUserId() + "/albums",//user id of login user
                parameters,
                HttpMethod.GET,
                new GraphRequest.Callback() {
                    public void onCompleted(final GraphResponse response) {
         }

        }).executeAsync();

第2步:使用相册ID

获取相册中的图片
 Bundle parameters = new Bundle();
        parameters.putString("fields", "images");
        parameters.putString("limit", count);
        /* make the API call */
        new GraphRequest(
                AccessToken.getCurrentAccessToken(),
                "/" + albumId + "/photos",
                parameters,
                HttpMethod.GET,
                new GraphRequest.Callback() {
                    public void onCompleted(GraphResponse response) {
                }

        }).executeAsync();

您可以看到我指定parameters.putString("limit", count); 在请求相册图片时,count是相册中可用的图片。计数超出100时,响应没有返回所有数据。我知道像分页这样的东西是我是否可以使用基于偏移的分页来检索相册中的所有可用图像?任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

在Facebook中获取用户照片有三种类型的分页,即基于光标的分页,基于时间的分页和基于偏移的分页。在您的情况下,您可以按照基于偏移的分页作为查询中的要求。您可能需要在图表请求中添加offset limit属性。因此,您可以通过初始化零来启动offset,然后将limit作为100传递。这意味着您将获得从0100的记录。并注意您可以为每个请求提取100条记录。更清楚地说,我正在编写代码用于获取相册图片URL的示例。

// ArrayList for storing images URL
private ArrayList<String> albumImages= new ArrayList<>();
// Records offset value, initially zero
private int offset = 0;
// Records count would like to fetch per request
private int limit = 100;

private void getAlbumsImages(final String albumId, final int count, int offsetValue, int limitValue) {
        offset = offsetValue;
        limit = limitValue;
        Bundle parameters = new Bundle();
        parameters.putString("fields", "images");
        parameters.putString("offset", String.valueOf(offset));
        parameters.putString("limit", String.valueOf(limit));

        /* make the API call */
        new GraphRequest(
                AccessToken.getCurrentAccessToken(),
                "/" + albumId + "/photos",
                parameters,
                HttpMethod.GET,
                new GraphRequest.Callback() {
                    public void onCompleted(GraphResponse response) {
                      /* handle the result */
                        try {
                            if (response.getError() == null) {
                                JSONObject joMain = response.getJSONObject();
                                if (joMain.has("data")) {
                                    JSONArray jaData = joMain.optJSONArray("data");
                                    for (int i = 0; i < jaData.length(); i++)//Get no. of images
                                    {
                                        JSONObject joAlbum = jaData.getJSONObject(i);
                                        JSONArray jaImages = joAlbum.getJSONArray("images");// get images Array in JSONArray format
                                if (jaImages.length() > 0) {
                             albumImages.add(jaImages.getJSONObject(0).getString("source"));
                                        }
                                    }
                                }

                                if (count > offset + limit) {
                                    offset = offset + limit;
                                    if (count - offset >= 100)
                                        limit = 100;
                                    else
                                        limit = count - offset;
                                    getFacebookImages(albumId, count, offset, limit);
                                }
                            } else {
                                Log.e("Error :", response.getError().toString());
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                }
        ).executeAsync();
    }

您必须对该函数进行递归调用,才能从相册中获取整个图像,或者在Rec​​yclerView滚动中正常更改函数。

用法

getFacebookImages(mAlbumsId, mAlbumsImagecount, offset, limit);