How to get Facebook user photo albums using api chart?

How can I get all custom photo albums from facebook. I tried like this with this Url https://graph.facebook.com/me/albums?access_token=xxxx

I use this code, I mentioned these permissions as well "user_photos" .

 Bundle parameters = new Bundle(); parameters.putString("format", "json"); parameters.putString("method", "user_photos"); parameters.putString(TOKEN, facebook.getAccessToken()); JSONObject response = null; try { response = Util.parseJson(Album_Url); JSONArray array = obj.optJSONArray("data"); for(int i = 0; i<array.length(); i++){ JSONObject main_obj = array.getJSONObject(i); String album = main_obj.getString("name"); } } catch (JSONException e1) { e1.printStackTrace(); } catch (FacebookError e1) { e1.printStackTrace(); } 

but I get this in log cat 09-12 14:27:42.990: W/System.err(12189): org.json.JSONException: Value https of type java.lang.String cannot be converted to JSONObject .

I tried too

 try { Bundle parameters = new Bundle(); parameters.putString("format", "json"); parameters.putString(TOKEN, facebook.getAccessToken()) ; String response = null; try { response = Util.openUrl(Album_Url, "GET", parameters); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } JSONObject obj = Util.parseJson(response); JSONArray array = obj.optJSONArray("data"); for(int i = 0; i<array.length(); i++){ JSONObject main_obj = array.getJSONObject(i); String album = main_obj.getString("name"); } } catch (JSONException e1) { e1.printStackTrace(); } catch (FacebookError e1) { e1.printStackTrace(); } 

I get this error 09-12 14:42:36.920: W/System.err(12259): com.facebook.android.FacebookError: Malformed access token

+3
source share
1 answer

In the onCreate() method, I call it 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 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); } } 

For completeness, here is what I use to get paging URLs for an infinite list:

 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 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 launched from onScrollListener in onCreate() :

  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(); } } } }); 

You can select the appropriate parts from my code, or you can use it in its entirety (after filling in a few spaces, of course). Hope this helps.

+6
source

All Articles