【问题标题】:How to get Facebook profile picture from Android App?如何从 Android App 获取 Facebook 头像?
【发布时间】:2016-07-28 11:42:15
【问题描述】:

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

我应该如何获取用户的个人资料图片并将其显示到我的活动中?

【问题讨论】:

标签: android facebook


【解决方案1】:

只需在现有代码中添加以下参数

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

picture.type(large) 将返回带有您的头像的 URL

顺便说一句,您可以像这样从 facebook 返回的 JSONObject 获取该 URL:

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

【讨论】:

    【解决方案2】:

    获取已登录用户的facebook_id

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

    并通过这一行使用 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());
    

    【讨论】:

      【解决方案3】:

      试试这个获取 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();
      

      然后用户的个人资料图片将在:-

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-12
        相关资源
        最近更新 更多