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

Я хочу сохранить изображение профиля 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 всегда равен нулю. Поэтому изображение никогда не сохраняется в пользовательской таблице синтаксического анализа. Любая помощь приветствуется.


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


Ответы (2)


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

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

person Max Worg    schedule 30.08.2014
comment
Я изменил свой ответ. Ваш код правильный, за исключением того факта, что вы пытаетесь сделать HTTP-вызов службы, которая разрешает соединения только через SSL. Просто переключите свой http на https, и все остальное будет работать. Я только что проверил его, и он работает после этой небольшой модификации. - person Max Worg; 30.08.2014

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

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

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

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

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

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

person SavageKing    schedule 21.05.2015