2016-07-28 12 views
0

Ich habe eine einfache Test App auf Android mit "Login mit Facebook" erstellt.Wie bekomme ich Facebook Profilbild von der Android App?

Dies ist mein Code:

public class MainActivity extends AppCompatActivity { 

    private TextView info; 
    private LoginButton loginButton; 
    private CallbackManager callbackManager; 

    String email; 
    String birthday; 
    String name; 
    String gender; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     FacebookSdk.sdkInitialize(getApplicationContext()); 

     setContentView(R.layout.activity_main); 

     callbackManager = CallbackManager.Factory.create(); 

     info = (TextView)findViewById(R.id.fb_text); 
     loginButton = (LoginButton)findViewById(R.id.fb_login); 
     loginButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday")); 


     loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       info.setText(
         "User ID: " 
           + loginResult.getAccessToken().getUserId() 
           + "\n" + 
           "Auth Token: " 
           + loginResult.getAccessToken().getToken() 
       ); 

       GraphRequest request = GraphRequest.newMeRequest(
         loginResult.getAccessToken(), 
         new GraphRequest.GraphJSONObjectCallback() { 
          @Override 
          public void onCompleted(JSONObject object, GraphResponse response) { 
           Log.v("LoginActivity", response.toString()); 

           // Application code 
           try { 
            email = object.getString("email"); 
            birthday = object.getString("birthday"); // 01/31/1980 format 
            name = object.getString("name"); 
            gender = object.getString("gender"); 
           } catch (JSONException e) { 
            e.printStackTrace(); 
           } 

           info.append(
             "User Name: " + name 
               + "\n" + 
               "birthday: " 
               + birthday 
               + "\n" + 
               "Gender: " 
               + gender 
               + "\n" + 
               "Email: " 
               + email 
           ); 
          } 
         }); 
       Bundle parameters = new Bundle(); 
       parameters.putString("fields", "id,name,email,gender,birthday"); 
       request.setParameters(parameters); 
       request.executeAsync(); 
      } 

      @Override 
      public void onCancel() { 
       info.setText("Login Cancelled"); 

      } 

      @Override 
      public void onError(FacebookException e) { 
       info.setText("Login Failed"); 
      } 
     }); 


    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 
} 

Was soll ich tun, das Profilbild des Nutzers zu bekommen und es in die meine Tätigkeit zeigen?

+0

Verwenden facebook api: https://developers.facebook.com/docs/graph-api/reference/user/picture/ – Uata

+0

Verwendung dieses: "https://graph.facebook.com/" + ID von fbuser + "/ Bild? Typ = groß" –

Antwort

4

Fügen Sie einfach die folgenden Parameter in Ihrem vorhandenen Code

parameters.putString("fields", "id,name,email,gender,birthday,picture.type(large)"); 

picture.type (groß) wird URL zurückkehren mit Ihrem Profilbild

Im übrigen können Sie die URL von JSONObject von Facebook zurückgegeben bekommen wie folgt:

profilePicUrl = object.getJSONObject("picture").getJSONObject("data").getString("url"); 
2

Versuchen Sie dies, erhalten Sie die ID von fb Benutzer und dann das Profil Bild von dieser ID.

GraphRequest request = new GraphRequest(
       AccessToken.getCurrentAccessToken(), 
       "/me", 
       null, 
       HttpMethod.GET, 
       new GraphRequest.Callback() { 
        public void onCompleted(GraphResponse response) { 
      /* handle the result */ 
         try { 
          Logs.log(TAG, response.getJSONObject().toString()); 
          String id = response.getJSONObject().getString("id"); 
          String email = response.getJSONObject().getString("email"); 
          String name = response.getJSONObject().getString("name"); 

         } catch (JSONException e) { 
          Logs.log(e); 
         } 
        } 
       } 
     ); 
     Bundle parameters = new Bundle(); 
     parameters.putString("fields", "id,name,email"); 
     request.setParameters(parameters); 
     request.executeAsync(); 

Dann profile pic von Benutzer sein: -

"https://graph.facebook.com/"+id of user+"/picture?type=large" 
2

get facebook_id von LoggedIn Benutzer von

name = object.getString("name"); 
facebook_id = object.getString("id"); 

erste Methode

Verwenden ProfilePictureView anstelle verwenden von ImageView

<com.facebook.login.widget.ProfilePictureView 
     android:id="@+id/image" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_centerInParent="true" /> 

Und gesetzt ProfilePic dazu durch diese Linie mit facebook_id

profilePictureView.setProfileId(facebook_id); 

Zweites Verfahren

Bitmap von pic Benutzerprofil Get facebook_id verwenden und diese Bitmap Image gesetzt.

URL img_value = new URL("https://graph.facebook.com/" + facebook_id + "/picture?type=large"); 

Bitmap mIcon = BitmapFactory.decodeStream(img_value.openConnection().getInputStream()); 
Verwandte Themen