2016-07-28 3 views
0

Я создал простое тестовое приложение для Android с именем «login with facebook».Как получить изображение профиля Facebook из приложения Android?

Это мой код:

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

Что я должен сделать, чтобы получить фотографию пользователя и показать его в моей деятельности?

+0

Использование facebook апи: https://developers.facebook.com/docs/graph-api/reference/user/picture/ – Uata

+0

использовать это: "https://graph.facebook.com/" + id fbuser + "/ picture? type = large" –

ответ

4

Просто добавьте следующий параметр в существующий код

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

picture.type (большой) возвращает URL с изображением профиля

Кстати, вы можете получить, что URL из JSONObject возвращенное Facebook например:

2

Попытайтесь это получить идентификатор пользователя fb, а затем получить профиль pic по этому идентификатору.

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

Затем профиль ПИК пользователь будет: -

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

ПОЛУЧИТЬ facebook_id пользователя LoggedIn по

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

ПЕРВЫЙ МЕТОД

Использование использовать ProfilePictureView на месте от ImageView

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

и установить ProfilePic с помощью facebook_id к этому по этой линии

profilePictureView.setProfileId(facebook_id); 

ВТОРОЙ МЕТОД

Получить Bitmap профиля пользователя с помощью ПОС facebook_id и установить этот Bitmap в ImageView.

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

Bitmap mIcon = BitmapFactory.decodeStream(img_value.openConnection().getInputStream()); 
Смежные вопросы