Facebook SDK 4.0.1 profile.getProfilePictureUri 在 android 中返回 null

Facebook SDK 4.0.1 profile.getProfilePictureUri returning null in android

我的 profile.getFirstName() 运行良好,但每当我尝试 profile.getProfilePictureUri(64,64) 时,它都会返回空对象。我正在使用 loginButton.setReadPermissions("user_friends") 这作为许可。

编辑 我的错误是,profile.getProfilePictureUri 没有返回 null,而是返回图 api 的图像 url。但我仍然无法设置从 url 转换为个人资料图片的位图。

我正在使用的代码

URL img_value = null;
            try {
                img_value = new URL(""+profile.getProfilePictureUri(64,64));
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
            Bitmap mIcon1=null;
            try {
                mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
            imageView.setImageBitmap(mIcon1);

Logcat

 at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272)
            at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
            at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
            at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:323)
            at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:190)
            at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
            at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25)

你好,我想分享一个代码,我可以使用它获得 Facebook 个人资料图片,如下所示:

public static Bitmap getFacebookProfilePicture(String userID){
URL imageURL = new URL("https://graph.facebook.com/" + userID + "/picture?type=large");
Bitmap bitmap = BitmapFactory.decodeStream(imageUrl.openConnection().getInputStream());

return bitmap;

}

您可以使用返回的 GraphUser 对象获取 Facebook 用户 ID。

位图 bitmap = getFacebookProfilePicture(userId);

如果您在使用代码时有任何疑问或错误,请回复反馈。

您有以下两种方法,基于这些方法您获得了 Graph User 的对象并能够获取用户 ID,如下所示:

private Session.StatusCallback callback = new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state,
            Exception exception) {
        onSessionStateChange(session, state, exception);

    }
};

private void onSessionStateChange(Session session, SessionState state,
        Exception exception) {

    if (session.isOpened()) {
        Log.i("access token", "Access Token" + session.getAccessToken());

        Request.newMeRequest(session, new Request.GraphUserCallback() {
            @Override
            public void onCompleted(GraphUser user, Response response) {
                Log.d("session", "callback ma ayu...");
                if (user != null) {
                    //Here You got the User Id as user.getId(); and used                                       //this id further

                    Log.i("USER BIRTHDAY ", "" + user.getBirthday());
                    updateUI();
                }

            }
        });

    }
}

我在使用 profile.getProfilePictureUri 时也遇到了类似的问题。 URI 来了,但图片没有按预期设置。

我的解决方法如下:

我使用了 square/picasso library.Link : https://github.com/square/picasso
它易于集成且功能极其强大。

合并后,只需使用以下功能即可:

Picasso.with(context).load(url).into(img);

希望对您有所帮助!

Facebook 有一个视图具有此功能。

<com.facebook.login.widget.ProfilePictureView
        android:id="@+id/profilePicture"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:gravity="center_horizontal"
        android:layout_marginBottom="10dp"
        facebook:com_facebook_preset_size="normal"
        android:layout_gravity="center_horizontal" />

要传递的唯一参数是 profileId

 profileImage = (ProfilePictureView) findViewById(R.id.profilePicture);
        profileImage.setProfileId(profile.getId());

您可以使用 Glide 以圆形 ImageView 加载您的 facebook 头像:

 if(Profile.getCurrentProfile()!=null){
        Uri url= Profile.getCurrentProfile().getProfilePictureUri(128,128);
           Glide.with(this)
                   .load(url)
                   .thumbnail(Glide.with(this).load(R.drawable.loader))
                   .apply(RequestOptions.circleCropTransform())
                   .into(((ImageView)findViewById(R.id.profile_pic)) );
        }