Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как сохранить изображение профиля facebook в пользовательской таблице Parse?

Автор вопроса: Jinson GeorgeОтветов: 2

Я хочу сохранить изображение профиля facebook в пользовательской таблице разбора. В настоящее время я пытаюсь это:

URL img_value = null;
try {
    img_value = new URL("http://graph.facebook.com/"+user.getId()+"/picture?type=small");
} catch (MalformedURLException e){
    // TODO Auto-generated catch block
    e.printStackTrace();
}
try {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
    Bitmap dp = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
    Log.i(IntegratingFacebook.TAG, "image retrieved from facebook");
    // Save the user profile info in a user property
    ParseUser currentUser = ParseUser.getCurrentUser();
    if(dp!=null){
       ParseFile saveImageFile= new ParseFile("profilePicture.jpg",compressAndConvertImageToByteFrom(dp));
       currentUser.put("profilePicture",saveImageFile);
    }
    currentUser.saveInBackground();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
}

URL правильный. Однако dp всегда равен нулю. Поэтому изображение никогда не сохраняется в пользовательской таблице синтаксического анализа. Любая помощь приветствуется.

  • Вы уверены, что URL-адрес, который вы используете, правильный? Salman Khakwani 30.03.2014
  • Да, вы можете проверить это сами, поместив свой идентификатор вместо user.getId()!! Jinson George 30.03.2014
  • Попробуйте жестко закодировать идентификатор FB вместо использования user.getId() (я подозреваю, что ваш пользователь нулевой или он возвращает неверный идентификатор) и скажите мне, если он все еще пуст. crazyPixel 30.03.2014
  • Я пробовал это... dp по-прежнему оказывается нулевым, а user.getId() действительно возвращает действительный идентификатор, поскольку я использую его в другом месте в своем приложении, и он действительно работает. Jinson George 30.03.2014

androidfacebookparse-platform

Ответы

Ответ 1 · Max Worg

Ваш код выглядит правильно, ЗА ИСКЛЮЧЕНИЕМ того факта, что все вызовы graph.facebook.com должны осуществляться через SSL. переключите свой http на https, и все будет хорошо.

Это предполагает, что вы находитесь в обратном вызове facebook, где пользовательский объект не является объектом ParseUser, потому что FacebookUserObject.getId() и ParseUserObject.getId(), очевидно, вернут разные результаты. Если вы находитесь в обратном вызове Facebook из запроса типа Request.newMeRequest(), тогда ваш код будет работать, просто изменив протокол на https. Если вы не находитесь в обратном вызове facebook, а пользовательский объект является объектом ParseUser, тогда вы захотите использовать что-то вроде user.getString("facebookId"), где facebookId - это значение, которое вы сохранили на предыдущем шаге (возможно, во время начальной регистрации).

Ответ 2 · SavageKing

То, как вы это делаете, очень грязно и может когда-нибудь сломаться в будущем... НО слышали ли вы когда-нибудь о Пикассо?

Убедитесь, что ваш URL-адрес правильный (logcat), возьмите библиотеку picasso для Android и измените это:

Bitmap dp = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());

в это (необходима попытка/поймать)

Bitmap dp = Picasso.with(getActivity()).load(URL).get();

и вы должны быть хорошо идти!

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы