Obtener la imagen del usuario de Facebook Graph-API

Quiero mostrar la imagen de perfil de los usuarios en una vista de lista. Cuando trato de llamar al graph-api de android para recuperar la imagen, siempre aparece el siguiente error.

java.io.IOException: Hostname  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) 

Este es el código que uso:

 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"); 

Cuando hago la misma llamada en el navegador (https://graph.facebook.com//picture?access_token=), obtengo la imagen devuelta en una url como esta https://fbcdn-profile-a.akamaihd.net/...

¿En qué formato se me entrega la imagen? JSON con una referencia a la imagen (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); 

Donde la ID es una identificación de su perfil.

Para más detalles, consulte esta Referencia para la API de gráficos

……………………….

Sé que esta pregunta es antigua, pero hay otra forma de obtener la imagen del usuario hoy en día fácilmente.

Primero, en el diseño de xml use:

  

Luego, en su fragmento o actividad, en el método 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); } } 

Espero que esto pueda ayudar a alguién. Estaba enfrentando el mismo problema y recibí esta publicación, pero es 2011. Hoy (2013) la forma de hacer las cosas ha cambiado.

Puede hacerlo utilizando ProfilePictureView en lugar de una vista de imagen:

  

Puede establecer el tamaño en pequeño / normal / grande / personalizado.

Luego, en su código, establezca la id de facebook de usuario de esta manera:

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

Espero que esto ayude.

Existe una manera fácil de obtener una imagen de usuario de Facebook para el usuario que inició sesión.

Para hacer que el código funcione, agregue esta statement de importación:

 import com.facebook.Profile; 

Vea el siguiente ejemplo (en este ejemplo, uso la biblioteca de Picasso para establecer la imagen):

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

Los números 400 y 400 son ancho y alto de imagen, respectivamente.

Se puede escribir de otra manera:

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

Use el código siguiente para obtener una imagen de perfil de usuario con 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(); 

Y más información refiera esto

O

Imagen de usuario simple de obtener

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

profilePictureView.setProfileId (facebookUser);

 xml  

Espero eso ayude !