我想将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。 因此,图像永远不会存储在解析用户表中。 任何帮助表示赞赏。
答案 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();
你应该好好去!