簡體   English   中英

Facebook GraphRequest獲取相冊列表或創建一個Android

[英]Facebook GraphRequest get list of albums or create one android

Facebook最近將其SDK更新為V 2.0。實際上,必須升級我的應用才能調用v2.0或更高版本。 一些修改是

*會話被Accesstoken取代。

到目前為止,我可以使用GraphRequest API登錄並發布視頻/圖像在他們的帳戶上。下一步是獲取用戶的相冊列表

醫生

/* 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沒有Request 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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM