如何将Facebook个人资料图片存储到Parse用户表中?

时间:2014-03-30 08:18:26

标签: android facebook parse-platform

我想将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();
    }
}

网址是对的。但是dp始终为null。 因此,图像永远不会存储在解析用户表中。 任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

您的代码看起来正确 EXCEPT ,因为对graph.facebook.com的所有调用都应该通过SSL。将您的http切换为https,您应该很高兴。

假设您在facebook回调中,用户对象不是ParseUser对象,因为FacebookUserObject.getId()ParseUserObject.getId()显然会返回不同的结果。如果您使用Request.newMeRequest()之类的请求进行Facebook回调,则只需将协议更改为https即可使用您的代码。如果您不在Facebook回调中并且用户对象是ParseUser对象,那么您将需要使用user.getString("facebookId")之类的内容,其中facebookId是您保存的值{{1}}上一步(可能在初次注册期间)。

答案 1 :(得分:0)

你要这样做的方式非常混乱,将来可能会破坏......但你听说过毕加索吗?

确保你的网址很好(logcat),抓住Android的picasso库并更改:

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

到此(需要尝试/捕获)

Bitmap dp = Picasso.with(getActivity()).load(URL).get();
你应该好好去!