Android и Facebook: как получить фотографию вошедшего в систему пользователя - PullRequest
10 голосов
/ 16 декабря 2010

Я использую официальный SDK Facebook в своем приложении для Android. После того, как пользователь войдет в систему, я могу получить UID и имя пользователя Facebook, например:

Facebook mFacebook = new Facebook(APP_ID);
// ... user logs in ...
//String jsonUser = mFacebook.request("me/picture"); // throws error
String jsonUser = mFacebook.request("me");
JSONObject obj = Util.parseJson(jsonUser);
String facebookId = obj.optString("id");
String name = obj.optString("name");

Я также знаю, что я могу получить доступ к изображению профиля с этими ссылками:

https://graph.facebook.com/<facebookId>/picture 
https://graph.facebook.com/<facebookId>/picture?type=large

Я бы хотел использовать этот код для получения изображения профиля:

public static Drawable getPictureForFacebookId(String facebookId) {

    Drawable picture = null;
    InputStream inputStream = null;

    try {
        inputStream = new URL("https://graph.facebook.com/" + facebookId + "/picture").openStream();
    } catch (Exception e) {        
     e.printStackTrace();
     return null;

    }
    picture = Drawable.createFromStream(inputStream, "facebook-pictures");

    return picture;
}

Но это просто не сработает. Я всегда получаю следующую ошибку:

SSL handshake failure: Failure in SSL library, usually a protocol error

И я не могу решить эту проблему. Это кажется довольно сложным (смотрите здесь или здесь ). Итак, какие еще есть варианты, чтобы получить изображение пользователя Facebook, который успешно вошел в мое приложение?

Ответы [ 7 ]

22 голосов
/ 04 ноября 2011
ImageView user_picture;
 userpicture=(ImageView)findViewById(R.id.userpicture);
 URL img_value = null;
 img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large");
 Bitmap mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
 userpicture.setImageBitmap(mIcon1);

где ID - это идентификатор вашего профиля ...

9 голосов
/ 16 декабря 2010

У меня тоже была эта проблема некоторое время назад. Я загрузил картинку с помощью асинхронной задачи, а затем установил ImageView с только что загруженным изображением. Я вставлю фрагмент кода:

ImageView fbUserAvatar = (ImageView) findViewById(R.id.fb_user_avatar);

private synchronized void downloadAvatar() {
    AsyncTask<Void, Void, Bitmap> task = new AsyncTask<Void, Void, Bitmap>() {

        @Override
        public Bitmap doInBackground(Void... params) {
            URL fbAvatarUrl = null;
            Bitmap fbAvatarBitmap = null;
            try {
                fbAvatarUrl = new URL("http://graph.facebook.com/"+USER_ID+"/picture");
                fbAvatarBitmap = BitmapFactory.decodeStream(fbAvatarUrl.openConnection().getInputStream());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return fbAvatarBitmap;
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            fbUserAvatar.setImageBitmap(result);
        }

    };
    task.execute();
}

Этот код работает для меня. Я надеюсь, что это работает и для вас.

5 голосов
/ 28 августа 2011

Вы можете запросить прямой URl, который содержит ваш токен доступа:

URL MyProfilePicURL = new URL("https://graph.facebook.com/me/picture?type=normal&method=GET&access_token="+ Access_token );

Затем получите декодированный BitMap и назначьте его для просмотра изображения:

Bitmap MyprofPicBitMap = null;
try {
    MyprofPicBitMap = BitmapFactory.decodeStream(MyProfilePicURL.openConnection().getInputStream());
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

MyProfilePicImageView.setImageBitmap(mIcon1);
4 голосов
/ 07 апреля 2011

запрос («я / картинка») выдает ошибку, потому что сервер возвращает 302 (перенаправление на URL-адрес изображения), а SDK facebook не обрабатывает это.

2 голосов
/ 04 мая 2013

Для отображения профиля изображения в вашем приложении используйте ProfilePictureView из Facebook SDK.

Ссылка

Просто позвоните по номеру setProfileId(String profileId).

Он позаботится о отображении изображения.

1 голос
/ 07 ноября 2011

Добавьте одну строку кода, и она будет решена.

HttpURLConnection.setFollowRedirects(true);
0 голосов
/ 20 марта 2015

Используйте это, ( обычно это GraphUser ):

ProfilePictureView p;
p = (ProfilePictureView) rootView.findViewById(R.id.fotoPerfil);
p.setProfileId(usuario.getId());

и разметка XML:

<com.facebook.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:preset_size="normal"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...