How to get facebook profile picture of user in facebook SDK Android

30,114

Solution 1

Auto redirection works automatically when original and redirected protocols are same.

So, try to load images from https instead of http : "https://graph.facebook.com/USER_ID/picture"; since image's url is "https://fbcdn-profile-a.akamaihd.net/...."

Then BitmapFactory.decodeStream shall work again.

Solution 2

Try this code,

try {
        URL image_value = new URL("http://graph.facebook.com/"+ user.getId()+ "/picture?type=large");
        Bitmap bmp = null;
        try {
                bmp = BitmapFactory.decodeStream(image_value.openConnection().getInputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
                profile_pic.setImageBitmap(bmp);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }

here profile_pic is your ImageView replace it with your ImageView Name.

Edit

Session.openActiveSession(this, true, new Session.StatusCallback() {

        @Override
        public void call(Session session, SessionState state,
                Exception exception) {
            if (session.isOpened()) {
                // make request to the /me API
                Request.executeMeRequestAsync(session,
                        new Request.GraphUserCallback() {
                            @Override
                            public void onCompleted(GraphUser user,
                                    Response response) {
                                if (user != null) {
                                   try {
    URL image_value = new URL("http://graph.facebook.com/"+ user.getId()+ "/picture?type=large");
    Bitmap bmp = null;
    try {
            bmp = BitmapFactory.decodeStream(image_value.openConnection().getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
            profile_pic.setImageBitmap(bmp);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
                                }
                            }
                        });
            } else {
                Toast.makeText(getApplicationContext(), "Error...",
                        Toast.LENGTH_LONG);
            }
        }
    });

Solution 3

Try this code

public static String getProfilePicture() {

    String stringURL = null;
    try {
        stringURL = "http://graph.facebook.com/" + URLEncoder.encode(DataStorage.getFB_USER_ID(), "UTF-8") + "?fields=" + URLEncoder.encode("picture", "UTF-8");
    } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
    }

    LogUtil.log(TAG, "getProfilePicture final url is : "+stringURL);

    JSONObject jsonObject = null;
    String response = "";

    try {

        HttpGet get = new HttpGet(stringURL);
        get.setHeader("Content-Type", "text/plain; charset=utf-8");
        get.setHeader("Expect", "100-continue");

        HttpResponse resp = null;
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            resp = httpClient.execute(get);
        } catch (Exception e) {
            e.printStackTrace();

        } 
        // get the response from the server and store it in result
        DataInputStream dataIn = null;
        try {
            //              dataIn = new DataInputStream(connection.getInputStream());
            if (resp != null) {
                dataIn = new DataInputStream((resp.getEntity().getContent()));
            }
        }catch (Exception e) {
            e.printStackTrace();

        } 

        if(dataIn != null){
            String inputLine;
            while ((inputLine = dataIn.readLine()) != null) {
                response += inputLine;
            }

            if(Constant.DEBUG)  Log.d(TAG,"final response is  : "+response);

            if(response != null && !(response.trim().equals(""))) {
                jsonObject = new JSONObject(response);
            }

            dataIn.close();
        }

    } catch (Exception e) {
        e.printStackTrace();

    } 

    String profilePicture = "";
    try{
        if(jsonObject != null){
            JSONObject jsonPicture = jsonObject.getJSONObject("picture");
            if(jsonPicture != null){
                JSONObject jsonData = jsonPicture.getJSONObject("data");
                if(jsonData != null){
                    profilePicture = jsonData.getString("url");
                }
            }
        }
    }catch (Exception e) {
        e.printStackTrace();
    }

    LogUtil.log(TAG, "user fb profile picture url is : "+profilePicture);
    return profilePicture;
}
Share:
30,114
Tulsiram Rathod
Author by

Tulsiram Rathod

I am Software engineer. Having great experience in android, with knowledge of Java, .Net, PHP, MySql. Server side knowledge has my plus point.

Updated on August 07, 2020

Comments

  • Tulsiram Rathod
    Tulsiram Rathod almost 4 years

    I used facebook 3.6 sdk . i want to get profile picture from graph user , last time i got image but now it returns null Bitmap.

    I used following code

    private void onSessionStateChange(Session session, SessionState state,
                Exception exception) {
            if (session.isOpened()) {
                Request.newMeRequest(session, new Request.GraphUserCallback() {
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (user != null) {
                            try {
                                URL imgUrl = new URL("http://graph.facebook.com/"
                                        + user.getId() + "/picture?type=large");
    
                                InputStream in = (InputStream) imgUrl.getContent();
                                Bitmap  bitmap = BitmapFactory.decodeStream(in);
                                //Bitmap bitmap = BitmapFactory.decodeStream(imgUrl      // tried this also
                                //.openConnection().getInputStream());
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }).executeAsync();
            }
        }
    

    When i use direct link then it works.

    imgUrl = new URL("https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-ash3/t39.2365-6/851558_160351450817973_1678868765_n.png");
    

    i refered this also Graph API Reference

  • Tulsiram Rathod
    Tulsiram Rathod about 10 years
    again bitmap returns null
  • Tulsiram Rathod
    Tulsiram Rathod about 10 years
    i tried and i get proper link .When i hit this link in browser then image loads, but Bitmap returns null through code
  • Tulsiram Rathod
    Tulsiram Rathod about 10 years
    from this url i get profile image , but this image quality is not good.
  • Yuvaraja
    Yuvaraja about 10 years
    @TulsiramRathod Can you share the Image url.
  • Tulsiram Rathod
    Tulsiram Rathod about 10 years
  • Mushtaq Jameel
    Mushtaq Jameel over 9 years
    Thanks for the reveal on the redirection.
  • theapache64
    theapache64 about 9 years
    i think by putting &redirect=false in the url prevent redirection,isn't ?