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

时间:2015-04-16 03:27:57

标签: android uri facebook-sdk-4.0

我的profile.getFirstName()工作正常,但是当我尝试profile.getProfilePictureUri(64,64)时,它返回null对象。我使用loginButton.setReadPermissions(" user_friends")作为权限。

修改 我的错误,profile.getProfilePictureUri没有返回null,而是返回图形api的图像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)

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您好我想分享一个代码,我可以获得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 bitmap = getFacebookProfilePicture(userId);

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

答案 2 :(得分:1)

您可以使用Glide以圆形ImageView:

加载您的脸谱资料图片
 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)) );
        }

答案 3 :(得分:0)

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

我的解决方案如下:

我使用了square/picasso library.Linkhttps://github.com/square/picasso
它易于集成,功能强大。

一旦合并,只需使用以下功能:

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

希望这有帮助!

答案 4 :(得分:-1)

您有以下两种方法,您可以根据这两种方法获得图形用户对象,并且能够获得用户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();
                }

            }
        });

    }
}