Facebook Graphrequest获取专辑列表或创建一个Android



Facebook最近将其SDK更新为v 2.0,实际上必须升级我的应用程序以拨打v2.0或更高。一些修改是

*会话被访问替代。

到目前为止,我可以在其帐户上使用GraphRequest API登录和发布视频/图像。Next步骤正在获取用户的专辑列表

文档说

/* make the API call */
new Request(
session,
"/{user-id}/albums",
null,
HttpMethod.GET,
new Request.Callback() {
    public void onCompleted(Response response) {
        /* handle the result */
    }
}
).executeAsync();

但是更新的SDK没有请求API,它允许会话或我解释错误吗?

有人找到了解决方案吗?

在onCreate()方法中,我称此asynctask:

private class getAlbumsData extends AsyncTask<Void, Void, Void> {
LinearLayout linlaHeaderProgress = (LinearLayout) findViewById(R.id.linlaHeaderProgress);
@Override
protected void onPreExecute() {
    // SHOW THE PROGRESS BAR (SPINNER) WHILE LOADING ALBUMS
    linlaHeaderProgress.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(Void... params) {
    // CHANGE THE LOADING MORE STATUS TO PREVENT DUPLICATE CALLS FOR
    // MORE DATA WHILE LOADING A BATCH
    loadingMore = true;
    // SET THE INITIAL URL TO GET THE FIRST LOT OF ALBUMS
    URL = "https://graph.facebook.com/" + initialUserID
            + "/albums&access_token="
            + Utility.mFacebook.getAccessToken() + "?limit=10";
    try {
        HttpClient hc = new DefaultHttpClient();
        HttpGet get = new HttpGet(URL);
        HttpResponse rp = hc.execute(get);
        if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            String queryAlbums = EntityUtils.toString(rp.getEntity());
            JSONObject JOTemp = new JSONObject(queryAlbums);
            JSONArray JAAlbums = JOTemp.getJSONArray("data");
            if (JAAlbums.length() == 0) {
                stopLoadingData = true;
                Runnable run = new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "No more Albums", Toast.LENGTH_SHORT)
                                .show();
                    }
                };
                Albums.this.runOnUiThread(run);
            } else {
                // PAGING JSONOBJECT
                if (JOTemp.has("paging"))   {
                    JSONObject JOPaging = JOTemp.getJSONObject("paging");
                    if (JOPaging.has("next")) {
                        String initialpagingURL = JOPaging
                                .getString("next");
                        String[] parts = initialpagingURL.split("limit=10");
                        String getLimit = parts[1];
                        pagingURL = "https://graph.facebook.com/"
                                + initialUserID + "/albums&access_token="
                                + Utility.mFacebook.getAccessToken()
                                + "?limit=10" + getLimit;
                    } else {
                        stopLoadingData = true;
                        Runnable run = new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(),
                                        "No more Albums",
                                        Toast.LENGTH_SHORT).show();
                            }
                        };
                        Albums.this.runOnUiThread(run);
                    }
                } else {
                    stopLoadingData = true;
                    Runnable run = new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "No more Albums",
                                    Toast.LENGTH_SHORT).show();
                        }
                    };
                    Albums.this.runOnUiThread(run);
                }
                getAlbums albums;
                for (int i = 0; i < JAAlbums.length(); i++) {
                    JSONObject JOAlbums = JAAlbums.getJSONObject(i);
                    if (JOAlbums.has("link")) {
                        albums = new getAlbums();
                        // GET THE ALBUM ID
                        if (JOAlbums.has("id")) {
                            albums.setAlbumID(JOAlbums.getString("id"));
                        } else {
                            albums.setAlbumID(null);
                        }
                        // GET THE ALBUM NAME
                        if (JOAlbums.has("name")) {
                            albums.setAlbumName(JOAlbums
                                    .getString("name"));
                        } else {
                            albums.setAlbumName(null);
                        }
                        // GET THE ALBUM COVER PHOTO
                        if (JOAlbums.has("cover_photo")) {
                            albums.setAlbumCover("https://graph.facebook.com/"
                                    + JOAlbums.getString("cover_photo")
                                    + "/picture?type=normal"
                                    + "&access_token="
                                    + Utility.mFacebook
                                            .getAccessToken());
                        } else {
                            albums.setAlbumCover("https://graph.facebook.com/"
                                    + JOAlbums.getString("id")
                                    + "/picture?type=album"
                                    + "&access_token="
                                    + Utility.mFacebook
                                            .getAccessToken());
                        }
                        // GET THE ALBUM'S PHOTO COUNT
                        if (JOAlbums.has("count")) {
                            albums.setAlbumPhotoCount(JOAlbums
                                    .getString("count"));
                        } else {
                            albums.setAlbumPhotoCount("0");
                        }
                        arrAlbums.add(albums);
                    }
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
@Override
protected void onPostExecute(Void result) {
    // SET THE ADAPTER TO THE LISTVIEW
    lv.setAdapter(adapter);
    // CHANGE THE LOADING MORE STATUS
    loadingMore = false;
    // HIDE THE PROGRESS BAR (SPINNER) AFTER LOADING ALBUMS
    linlaHeaderProgress.setVisibility(View.GONE);
}
}

为了完整,这是我用来获取"永无止境"列表的分页URL的内容:

private class loadMoreAlbums extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
    // SHOW THE BOTTOM PROGRESS BAR (SPINNER) WHILE LOADING MORE ALBUMS
    linlaProgressBar.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(Void... params) {
    // SET LOADING MORE "TRUE"
    loadingMore = true;
    // INCREMENT CURRENT PAGE
    current_page += 1;
    // Next page request
    URL = pagingURL;
    // Log.e("NEW URL", URL);
    try {
        HttpClient hc = new DefaultHttpClient();
        HttpGet get = new HttpGet(URL);
        HttpResponse rp = hc.execute(get);
        if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            String queryAlbums = EntityUtils.toString(rp.getEntity());
            // Log.e("RESULT", queryAlbums);
            JSONObject JOTemp = new JSONObject(queryAlbums);
            JSONArray JAAlbums = JOTemp.getJSONArray("data");
            if (JAAlbums.length() == 0) {
                stopLoadingData = true;
                Runnable run = new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "No more Albums", Toast.LENGTH_SHORT)
                                .show();
                    }
                };
                Albums.this.runOnUiThread(run);
            } else {
                // PAGING JSONOBJECT
                JSONObject JOPaging = JOTemp.getJSONObject("paging");
                // Log.e("PAGING", JOPaging.toString());
                if (JOPaging.has("next")) {
                    String initialpagingURL = JOPaging
                            .getString("next");
                    // Log.e("initialpagingURL", initialpagingURL);
                    String[] parts = initialpagingURL.split("limit=10");
                    String getLimit = parts[1];
                    pagingURL = "https://graph.facebook.com/"
                            + initialUserID + "/albums&access_token="
                            + Utility.mFacebook.getAccessToken()
                            + "?limit=10" + getLimit;
                    // Log.e("NEW PAGING URL", pagingURL);
                } else {
                    stopLoadingData = true;
                    Runnable run = new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "No more Albums available",
                                    Toast.LENGTH_SHORT).show();
                        }
                    };
                    Albums.this.runOnUiThread(run);
                }
                getAlbums albums;
                for (int i = 0; i < JAAlbums.length(); i++) {
                    JSONObject JOAlbums = JAAlbums.getJSONObject(i);
                    // Log.e("INDIVIDUAL ALBUMS", JOAlbums.toString());
                    if (JOAlbums.has("link")) {
                        albums = new getAlbums();
                        // GET THE ALBUM ID
                        if (JOAlbums.has("id")) {
                            albums.setAlbumID(JOAlbums.getString("id"));
                        } else {
                            albums.setAlbumID(null);
                        }
                        // GET THE ALBUM NAME
                        if (JOAlbums.has("name")) {
                            albums.setAlbumName(JOAlbums
                                    .getString("name"));
                        } else {
                            albums.setAlbumName(null);
                        }
                        // GET THE ALBUM COVER PHOTO
                        if (JOAlbums.has("cover_photo")) {
                            albums.setAlbumCover("https://graph.facebook.com/"
                                    + JOAlbums.getString("cover_photo")
                                    + "/picture?type=album"
                                    + "&access_token="
                                    + Utility.mFacebook
                                            .getAccessToken());
                        } else {
                            albums.setAlbumCover("https://graph.facebook.com/"
                                    + JOAlbums.getString("id")
                                    + "/picture?type=album"
                                    + "&access_token="
                                    + Utility.mFacebook
                                            .getAccessToken());
                        }
                        // GET THE ALBUM'S PHOTO COUNT
                        if (JOAlbums.has("count")) {
                            albums.setAlbumPhotoCount(JOAlbums
                                    .getString("count"));
                        } else {
                            albums.setAlbumPhotoCount("0");
                        }
                        arrAlbums.add(albums);
                    }
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
@Override
protected void onPostExecute(Void result) {
    // get listview current position - used to maintain scroll position
    int currentPosition = lv.getFirstVisiblePosition();
    // APPEND NEW DATA TO THE ARRAYLIST AND SET THE ADAPTER TO THE
    // LISTVIEW
    adapter = new AlbumsAdapter(Albums.this, arrAlbums);
    lv.setAdapter(adapter);
    // Setting new scroll position
    lv.setSelectionFromTop(currentPosition + 1, 0);
    // SET LOADINGMORE "FALSE" AFTER ADDING NEW FEEDS TO THE EXISTING
    // LIST
    loadingMore = false;
    // HIDE THE BOTTOM PROGRESS BAR (SPINNER) AFTER LOADING MORE ALBUMS
    linlaProgressBar.setVisibility(View.GONE);
}
}

loadMorealBums asynctask是从onCreate()中的onscrolllistener设置运行的:

lv.setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    }
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        int lastInScreen = firstVisibleItem + visibleItemCount;
        if ((lastInScreen == totalItemCount) && !(loadingMore)) {
            if (stopLoadingData == false) {
                // FETCH THE NEXT BATCH OF FEEDS
                new loadMoreAlbums().execute();
            }
        }
    }
});

您可以从我的代码中选择相关部分,也可以在整体中使用它(当然填充了一些空白后)。希望其中一些会有所帮助。

我使用此方法来获取Facebook专辑。它没有分页过程。对我有好处。

   public void getAlbums(){

    GraphRequest request = GraphRequest.newMeRequest(
            AccessToken.getCurrentAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(
                        JSONObject object,
                        GraphResponse response) {
                        if(object!=null) {
                            try {
                                JSONObject obj = object.getJSONObject("albums");
                                JSONArray jArray = obj.getJSONArray("data");
                                for(int i =0;i<jArray.length();i++){
                                    FbAlbumItem album = new FbAlbumItem();
                                    JSONObject dataObj = jArray.getJSONObject(i);
                                    album.setAlbumId(dataObj.getString("id"));
                                    album.setAlbumName(dataObj.getString("name"));
                                    album.setImageUrl("https://graph.facebook.com/" + dataObj.getString("cover_photo") + "/picture?type=normal"
                                            + "&access_token=" + AccessToken.getCurrentAccessToken().getToken());
                                    fbAlbums.add(album);
                                }
                                lv.setAdapter(adapter);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }else
                            StaticFunctions.message(con,"Bir Hata Oluştu");
                linlaHeaderProgress.setVisibility(View.GONE);
                }
            });
    Bundle parameters = new Bundle();
    parameters.putString("fields", "albums{id,cover_photo,name}");
    request.setParameters(parameters);
    request.executeAsync();
}

我使用了SafaGürdag中的功能,仅包含一个小错误或不推荐的呼叫,对于我正在写作的日期如下所示。而不是使用:

    album.setImageUrl("https://graph.facebook.com/" + dataObj.getString("cover_photo") 
+ "/picture?type=normal" + "&access_token=" + AccessToken.getCurrentAccessToken().getToken());

我替换为:

    album.setImageUrl("https://graph.facebook.com/" + dataObj.getString("id")
 + "/picture?type=thumbnail" + "&access_token=" + AccessToken.getCurrentAccessToken().getToken());

相关内容

最新更新