【问题标题】:How to get profile pic from facebook using Picasso [Android Studio]如何使用 Picasso [Android Studio] 从 Facebook 获取个人资料图片
【发布时间】:2017-11-11 23:47:50
【问题描述】:

如何使用 picasso 从 facebook 获取个人资料图片?

我已按照本教程 Can't get FB profile picture with Firebase 进行操作,并且没有出现编译错误,图片似乎并不适用。

Image of the Profile Picture

这是 XML 部分

<ImageButton
        android:id="@+id/profile_photo"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_below="@+id/Profile_cover"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="-60dp"
        android:elevation="5dp"
        android:padding="20dp"
        android:scaleType="centerCrop"/>

这是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);

    //init Firebase\\
    auth = FirebaseAuth.getInstance();
    user = FirebaseAuth.getInstance().getCurrentUser();
    //END init Firebase\\

    //Init UI variables\\
    username = findViewById(R.id.Profile_username);
    profilePicIV = findViewById(R.id.profile_photo);
    //End Init UI variables\\


    //Init Methods\\
    setDataToValue(user);
    //End Init Methods\\

    //Facebook\\

    String profilePicUrl = "https://graph.facebook.com/" + UserID +"/picture?type=large";
    Picasso.with(this).load(profilePicUrl).into(profilePicIV);

}

private FacebookCallback<LoginResult> mCallback = new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(final LoginResult loginResult) {
        GraphRequest request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        Log.e("response: ", response +"");
                        try{
                            String  id = object.getString("id").toString(),
                                    email = object.getString("email").toString(),
                                    name = object.getString("name").toString(),
                                    profilePicUrl = "https://graph.facebook.com/" + loginResult.getAccessToken().getUserId() +"/picture?type=large";
                                    UserID = loginResult.getAccessToken().getUserId();
                            Log.d("imageFB", profilePicUrl);
                            Log.d("FB_ID", id);


                        }catch (Exception e){
                            e.printStackTrace();
                        }

                        finish();
                    }
                });
        Bundle params = new Bundle();
        params.putString("fields", "id,name,email,gender,birthday,friends,likes,hometown,education,work");
        request.setParameters(params);
        request.executeAsync();


    }

毕加索下载

String profilePicUrl = "https://graph.facebook.com/" + UserID +"/picture?type=large";
    Picasso.with(this).load(profilePicUrl).into(profilePicIV);

【问题讨论】:

    标签: java android facebook picasso


    【解决方案1】:

    您正试图在回调中分配UserID 之前设置图片。

    尝试在这一行之后设置图像:

    String  id = object.getString("id").toString(),
                                    email = object.getString("email").toString(),
                                    name = object.getString("name").toString(),
                                    profilePicUrl = "https://graph.facebook.com/" + loginResult.getAccessToken().getUserId() +"/picture?type=large";
                                    UserID = loginResult.getAccessToken().getUserId();
    

    您需要这样做的原因是因为 Facebook 身份验证以 异步 方式发生,并且 UserId 在调用回调之前不会被初始化。

    【讨论】:

    • Picasso.with(this).load(profilePicUrl).into(profilePicIV); 中的“this”出现错误,提示无法应用毕加索
    • 尝试使用ActivityName.this 而不是this
    猜你喜欢
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多