android - puede - obtener datos de facebook
Obtener la imagen del usuario de Facebook Graph-API (7)
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 <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)
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)?
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 declaración 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.
Puede hacerlo utilizando ProfilePictureView en lugar de una vista de imagen:
<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" />
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.
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:
<com.facebook.widget.ProfilePictureView
android:id="@+id/userImage"
android:layout_width="69dp"
android:layout_height="69dp"
android:layout_gravity="center_horizontal" />
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.
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 This
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);
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
............................
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>
Espero eso ayude !