web-dev-qa-db-fra.com

Obtenir l'image de l'utilisateur à partir de Facebook Graph-API

Je souhaite afficher la photo de profil de l'utilisateur dans une vue en liste. Lorsque j'essaie d'appeler le graph-api à partir d'Android pour récupérer l'image, j'obtiens toujours l'erreur suivante. 

Java.io.IOException: Hostname <fbcdn-profile-a.akamaihd.net> was not verified
    at org.Apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.getSecureSocket(HttpConnection.Java:170)
    at org.Apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnection$HttpsEngine.connect(HttpsURLConnection.Java:398)
    at org.Apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.sendRequest(HttpURLConnection.Java:1224)
    at org.Apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.doRequestInternal(HttpURLConnection.Java:1558)
    at org.Apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.doRequest(HttpURLConnection.Java:1551)
    at org.Apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.Java:1052)
    at org.Apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnection.getInputStream(HttpsURLConnection.Java:252)
    at com.facebook.Android.Util.openUrl(Util.Java:200)
    at com.facebook.Android.Facebook.request(Facebook.Java:559)

C'est le code utilisé par moi:

private static void retrieveProfilePicture(String userId) throws MalformedURLException, IOException{
        facebook = FacebookHelper.getInstance();
        Bundle bundle = new Bundle();
        bundle.putString(Facebook.TOKEN, facebook.getAccessToken());
        Object picture = facebook.request("/"+userId+"/picture", bundle, "GET");

Lorsque je fais le même appel dans le navigateur (https://graph.facebook.com//picture?access_token=), l'image renvoyée est renvoyée dans une URL de ce type https://fbcdn-profile-a.akamaihd.net/...

Dans quel format l'image est-elle livrée? JSON avec un ref to image (url)?

20
mybecks
 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);

Où ID correspond à celui de votre profil.

Pour plus de détails, consultez ceci Référence de Graph API

............................

83
Venky

Je sais que cette question est un peu ancienne, mais il existe un autre moyen d'obtenir facilement la photo de l'utilisateur.

Tout d'abord, dans la mise en page XML, utilisez:

<com.facebook.widget.ProfilePictureView
        Android:id="@+id/userImage"
        Android:layout_width="69dp"
        Android:layout_height="69dp"
        Android:layout_gravity="center_horizontal" />

Ensuite, dans votre fragment ou activité, dans la méthode onSessionStateChange:

private void onSessionStateChange(Session session, SessionState state,
            Exception exception) {
        if (state.isOpened()) {
            Log.i(TAG, "Logged in...");

            // Request user data and show the results
            Request.newMeRequest(session, new Request.GraphUserCallback() {
                @Override
                public void onCompleted(GraphUser user, Response response) {
                    if (user != null) {
                        //HERE: DISPLAY USER'S PICTURE
                        userPicture.setProfileId(user.getId());
                    }
                }
            }).executeAsync();

        } else if (state.isClosed()) {
            Log.i(TAG, "Logged out...");

            userPicture.setProfileId(null);
        }
    }

J'espère que cela peut aider quelqu'un. Je faisais face au même problème et je reçois ce billet mais nous sommes en 2011. Aujourd'hui (2013), la façon de faire a changé.

16
kiduxa

Vous pouvez le faire en utilisant ProfilePictureView au lieu d’une vue d’image:

<com.facebook.widget.ProfilePictureView
   Android:id="@+id/friendProfilePicture"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:gravity="center_horizontal"
   Android:padding="5sp"
   facebook:preset_size="small" />

Vous pouvez définir la taille sur small/normal/large/custom.

Puis dans votre code, définissez l'identifiant facebook de l'utilisateur comme suit:

ProfilePictureView profilePictureView;
profilePictureView = (ProfilePictureView) findViewById(R.id.friendProfilePicture);
profilePictureView.setProfileId(userId);

J'espère que cette aide.

6
Nikhil Borad

Il existe un moyen simple d'obtenir une image d'utilisateur Facebook pour un utilisateur connecté. 

Pour que le code fonctionne, ajoutez cette instruction d'importation: 

import com.facebook.Profile;

Voir l'exemple ci-dessous (dans cet exemple, j'utilise bibliothèque Picasso pour définir l'image):

Uri imageUri = Profile.getCurrentProfile().getProfilePictureUri(400, 400);
Picasso.with(this).load(imageUri).into(imageView);

Les nombres 400 et 400 sont respectivement la largeur et la hauteur de l'image.

3
dzikovskyy

Peut être écrit d'une autre manière:

ImageView user_picture;
         ImageView userpicture = (ImageView)findViewById(R.id.userpicture);
         URL img_value = null;
         try {
            img_value = new URL("http://graph.facebook.com/"+"100004545962286"+"/picture?type=large");
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         Bitmap mIcon1 = null;
        try {
            mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         userpicture.setImageBitmap(mIcon1);
2
TharakaNirmana

Utilisez le code ci-dessous pour obtenir une image de profil d’utilisateur avec Facebook Graph API.

     ImageView profileImage = (ImageView) findViewById(R.id.profileImage);
     Bundle params = new Bundle();
     params.putBoolean("redirect", false);
     params.putString("type", "large");
          new GraphRequest(
          AccessToken.getCurrentAccessToken(),
          "me/picture",
          params,
          HttpMethod.GET,
          new GraphRequest.Callback() {
          public void onCompleted(GraphResponse response) {
          try {
            String picUrlString = (String) response.getJSONObject().getJSONObject("data").get("url");
            Glide.with(getApplicationContext()).load(picUrlString).placeholder(R.drawable.ic_launcher).into(profileImage);
          } catch (JSONException | IOException e) {
            e.printStackTrace();
        }
    }
}
).executeAsync();    

Et plus d'informations, référez-vous This 

OR

Simple pour obtenir une image utilisateur

String UserImageUrl="https://graph.facebook.com/" + facebookUser.getFacebookID() + "/picture?type=large"; 
Glide.with(getApplicationContext()).load(UserImageUrl).placeholder(R.drawable.ic_launcher).into(profileImage); 
2
Ravi Vaghela
private String facebookUser;


AccessToken token;
    token = AccessToken.getCurrentAccessToken();

    facebookUser = AccessToken.getCurrentAccessToken().getUserId();
    ProfilePictureView profilePictureView;
    profilePictureView = (ProfilePictureView) findViewById(R.id.facebookUser);

profilePictureView.setProfileId (facebookUser);

xml
<com.facebook.login.widget.ProfilePictureView
 Android:id="@+id/facebookUser"
 Android:layout_width="wrap_content"
 Android:layout_height="wrap_content"
 Android:layout_alignParentTop="true"
 Android:layout_centerHorizontal="true"></com.facebook.login.widget.ProfilePictureView>

j'espère que ça aide !

0
Enpon