Android and Facebook: How to get picture of logged in User
Solution 1
request("me/picture") throws an error because the server returns a 302 (redirect to the image url) and the facebook sdk does not handle this.
Solution 2
ImageView user_picture;
userpicture=(ImageView)findViewById(R.id.userpicture);
URL img_value = null;
img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large");
Bitmap mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
userpicture.setImageBitmap(mIcon1);
where ID is ur profile ID...
Solution 3
I also had that problem some time ago. What I did was download the picture using an async task, and then set an ImageView with the image just downloaded. I will paste the code snippet:
ImageView fbUserAvatar = (ImageView) findViewById(R.id.fb_user_avatar);
private synchronized void downloadAvatar() {
AsyncTask<Void, Void, Bitmap> task = new AsyncTask<Void, Void, Bitmap>() {
@Override
public Bitmap doInBackground(Void... params) {
URL fbAvatarUrl = null;
Bitmap fbAvatarBitmap = null;
try {
fbAvatarUrl = new URL("http://graph.facebook.com/"+USER_ID+"/picture");
fbAvatarBitmap = BitmapFactory.decodeStream(fbAvatarUrl.openConnection().getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fbAvatarBitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
fbUserAvatar.setImageBitmap(result);
}
};
task.execute();
}
This code works for me. I hope it works for you too.
Solution 4
You can request a direct URl which contains your Access token:
URL MyProfilePicURL = new URL("https://graph.facebook.com/me/picture?type=normal&method=GET&access_token="+ Access_token );
Then get a decoded BitMap and assign it to image view:
Bitmap MyprofPicBitMap = null;
try {
MyprofPicBitMap = BitmapFactory.decodeStream(MyProfilePicURL.openConnection().getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MyProfilePicImageView.setImageBitmap(mIcon1);
Solution 5
For displaying profile pic in your app, use ProfilePictureView
from Facebook SDK.
Refer This
Just call setProfileId(String profileId)
on it.
It will take care of displaying the image.
Pascal Klein
I learned coding in university and founded three startups, in all three of them i was responsible for Frontend Development and Online Marketing. Currently I am working on an online marketplace for short term work: InStaff - Book Hostesses & Eventstaff online I know PHP, Javascript, Java and some Objective-C. I also got to know a little bit of Scala, Python and Octave in my free time. Most of my developer time I worked on web- and mobile applications with Kohana, jQuery Mobile and Android.
Updated on March 20, 2020Comments
-
Pascal Klein about 4 years
I use the official Facebook SDK in my Android Application. After the user logs in, I can get the uid and the name of the facebook user like so:
Facebook mFacebook = new Facebook(APP_ID); // ... user logs in ... //String jsonUser = mFacebook.request("me/picture"); // throws error String jsonUser = mFacebook.request("me"); JSONObject obj = Util.parseJson(jsonUser); String facebookId = obj.optString("id"); String name = obj.optString("name");
I also know that the I can access the profile picture with those links:
https://graph.facebook.com/<facebookId>/picture https://graph.facebook.com/<facebookId>/picture?type=large
I would love to use this code to geht the profile picture:
public static Drawable getPictureForFacebookId(String facebookId) { Drawable picture = null; InputStream inputStream = null; try { inputStream = new URL("https://graph.facebook.com/" + facebookId + "/picture").openStream(); } catch (Exception e) { e.printStackTrace(); return null; } picture = Drawable.createFromStream(inputStream, "facebook-pictures"); return picture; }
But it just wont work. I always get the following error:
SSL handshake failure: Failure in SSL library, usually a protocol error
And I cant solve this issue. It seems to be rather complicated(look here or here). So what other options are there to get the picture of a facebook user that successfully logged into my application?
-
MKJParekh over 12 yearsnice and straight way but i would say id even can be name of the user like "parag.chauhan"
-
Chirag_CID over 12 yearsthts true..but this cant be use for each user, as thr could be so many user of same name...
-
Idolon over 12 yearsThis code just couldn't work for you because it didn't compiled.
AsyncTask
takes 3 parameters and not 1 (so you can't useAsyncTask<Bitmap>
, butAsyncTask<Void, Void, Bitmap>
). Also it doesn't havetaskComplete
method, but haveonPostExecute
instead. I edited your code to make it compilable. -
Antonio over 12 yearsI use my own AsyncTask with only one parameter, so yes, it was working. Anyway, thanks for editing...
-
AndroidHacker about 10 yearsNot working for higher version ...This works like charm in lower version but not in higher version. What should I do for that?
-
Olavz almost 10 yearsThe current URL is a 302 redirect, get the 302 location and a second request to get the image. This helped me out link