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)?
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
............................
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é.
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.
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.
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);
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
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);
private String facebookUser;
AccessToken token;
token = AccessToken.getCurrentAccessToken();
facebookUser = AccessToken.getCurrentAccessToken().getUserId();
ProfilePictureView profilePictureView;
profilePictureView = (ProfilePictureView) findViewById(R.id.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 !