Intereting Posts
Как отправить sms в Android в двойную SIM-карту? Запуск Activity from Preference Activity вызывает исключение отказа от разрешения Доступ к Виртуальному принтеру Google в android Пикассо загружает изображение с треугольником в углу изображения Как установить правильные размеры значков приложений в Android, в том числе для Amazon Kindle Fire? Как я могу изменить и перевыпустить приложение AOSP? Android: конвертировать дату в миллисекунды Как проверить, поддерживает ли Chrome пользовательские вкладки Chrome? Как правильно инициировать многоэкранную контекстную панель действий для ListFragment (с проблемами) Firebase FCM уведомления click_action полезная нагрузка Android: как перерисовать графический элемент? Получить IPaddress компьютера в проекте Android с помощью java Проверьте ход загрузки и загрузки (API для Google Диска для Android или Java) Защитите сокет в VpnService Использование include в качестве корневого узла узла макета «Исключение ошибки раздувания класса» исключение

Android и Facebook: как получить изображение зарегистрированного пользователя

Я использую официальный Facebook SDK в своем приложении для 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, успешно зарегистрировавшегося в моем приложении?

Solutions Collecting From Web of "Android и Facebook: как получить изображение зарегистрированного пользователя"

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

 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 – идентификатор профиля ur …

Некоторое время назад у меня тоже была эта проблема. Я сделал загрузку изображения с помощью задачи async, а затем установил 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(); } 

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

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

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

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

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

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

См. Это

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

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

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

 HttpURLConnection.setFollowRedirects(true); 

Используйте это, ( usuario – 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"/>