it-swarm.com.de

Holen Sie sich ein Benutzerbild von der Facebook Graph-API

Ich möchte das Benutzerprofilbild in einer Listenansicht anzeigen. Wenn ich versuche, die Grafik-API von Android aufzurufen, um das Bild abzurufen, erhalte ich immer die folgende Fehlermeldung. 

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)

Dies ist der von mir verwendete Code:

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

Wenn ich denselben Aufruf im Browser tätige (https://graph.facebook.com//picture?access_token=), erhalte ich das Bild mit einer solchen URL https://fbcdn-profile-a.akamaihd.net/...

In welchem ​​Format wird mir das Bild geliefert? JSON mit einem Verweis auf 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);

Dabei ist ID Ihre Profil-ID.

Weitere Informationen finden Sie hier Referenz für Graph API

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

83
Venky

Ich weiß, dass diese Frage ziemlich alt ist, aber es gibt einen anderen Weg, um das Benutzerbild heutzutage leicht zu bekommen.

Verwenden Sie im XML-Layout zunächst Folgendes:

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

Dann in Ihrem Fragment oder Ihrer Aktivität in der Methode 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);
        }
    }

Hoffe das kann jemandem helfen. Ich war mit dem gleichen Problem konfrontiert und bekomme diesen Beitrag, aber es ist 2011. Heute (2013) hat sich die Art, Dinge zu tun, geändert.

16
kiduxa

Sie können dies tun, indem Sie ProfilePictureView anstelle einer Bildansicht verwenden:

<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" />

Sie können die Größe auf klein/normal/groß/benutzerdefiniert einstellen.

Legen Sie dann in Ihrem Code die Benutzer-Facebook-ID wie folgt fest:

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

Ich hoffe das hilft.

6
Nikhil Borad

Es gibt eine einfache Möglichkeit, ein Facebook-Benutzerbild für den angemeldeten Benutzer zu erhalten. 

Damit der Code funktioniert, fügen Sie diese Importanweisung hinzu: 

import com.facebook.Profile;

Siehe Beispiel (in diesem Beispiel verwende ich Picasso-Bibliothek , um ein Bild festzulegen):

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

Die Zahlen 400 und 400 sind Bildbreite bzw. -höhe.

3
dzikovskyy

Kann anders geschrieben werden:

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

Verwenden Sie den folgenden Code, um ein Benutzerprofil mit Facebook Graph API abzurufen.

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

Und weitere Informationen beziehen sich auf This 

OR

Benutzerbild einfach abrufen

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>

ich hoffe es hilft !

0
Enpon