2016-07-28 102 views
0

我已經創建了一個簡單的測試應用程序與Android「登錄與臉譜」。如何從Android應用程序獲取Facebook個人資料照片?

這是我的代碼:

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 API: https://developers.facebook.com/docs/graph-api/reference/user/picture/ – Uata

+0

使用這樣的: 「https://graph.facebook.com/」 + fbuser +「/ picture?type = large」 –

回答

4

只需添加下面的參數在現有的代碼

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

picture.type(大)會與您的個人資料圖片

返回URL順便說一句,你可以從JSONObject的那個URL被Facebook返回像這樣:

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

試試這個獲得fb用戶的id,然後通過該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(); 

的用戶然後輪廓PIC將是: -

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

的loggedIn用戶獲取facebook_id通過

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

第一種方法

使用的場所使用ProfilePictureViewImageView

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

而且使用facebook_id這個由這條線設置ProfilePic

profilePictureView.setProfileId(facebook_id); 

第二方法

使用facebook_id獲取用戶的個人資料相片的位圖和這個位圖設置爲ImageView的。

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

Bitmap mIcon = BitmapFactory.decodeStream(img_value.openConnection().getInputStream()); 
相關問題