我正在使用Android中的Facebook SDK 4.4.0,并希望使用图形请求获取用户当前个人资料图片。如何做到这一点?
我已经看到人们使用
https://graph.facebook.com/me/picture?access_token=ACCESS_TOKEN
提取个人资料图片的API,但我无法弄清如何从中提取个人资料图片。
我正在使用Android中的Facebook SDK 4.4.0,并希望使用图形请求获取用户当前个人资料图片。如何做到这一点?
我已经看到人们使用
https://graph.facebook.com/me/picture?access_token=ACCESS_TOKEN
提取个人资料图片的API,但我无法弄清如何从中提取个人资料图片。
Bundle params = new Bundle();
params.putString("fields", "id,email,gender,cover,picture.type(large)");
new GraphRequest(AccessToken.getCurrentAccessToken(), "me", params, HttpMethod.GET,
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
if (response != null) {
try {
JSONObject data = response.getJSONObject();
if (data.has("picture")) {
String profilePicUrl = data.getJSONObject("picture").getJSONObject("data").getString("url");
Bitmap profilePic= BitmapFactory.decodeStream(profilePicUrl .openConnection().getInputStream());
mImageView.setBitmap(profilePic);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).executeAsync();
getFacebookProfilePicture()
放在 onCreate 之外,但它显示 .openConnection()
未解决。不确定我做错了什么。 - ntgCleanerAccessToken.getCurrentAccessToken()
(根据 Facebook API),而不是 token
。它非常好用!谢谢你更新了一个旧答案! - ntgCleaner从最新的sdk 4.5.0版本开始
String url;
Bundle parametersPicture = new Bundle();
parametersPicture.putString("fields", "picture.width(150).height(150)");
GraphResponse lResponsePicture = new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/",
parametersPicture, null).executeAndWait();
if (lResponsePicture != null && lResponsePicture.getError() == null &&
lResponsePicture.getJSONObject() != null) {
url = lResponsePicture.getJSONObject().getJSONObject("picture")
.getJSONObject("data").getString("url");
}
String image_url = "http://graph.facebook.com/" + Profile.getCurrentProfile().getId() + "/picture?type=large";
Glide.with(activity)
.load(image_url)
.into(imageView);
implementation 'com.github.bumptech.glide:glide:4.1.1'
protected void rajendra(LoginButton login_button) {
login_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult login_result) {
GraphRequest request = GraphRequest.newMeRequest(
login_result.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object,GraphResponse response) {
response.getError();
try {
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
String profilePicUrl = object.getJSONObject("picture").getJSONObject("data").getString("url");
URL fb_url = new URL(profilePicUrl);//small | noraml | large
HttpsURLConnection conn1 = (HttpsURLConnection) fb_url.openConnection();
HttpsURLConnection.setFollowRedirects(true);
conn1.setInstanceFollowRedirects(true);
Bitmap fb_img = BitmapFactory.decodeStream(conn1.getInputStream());
image.setImageBitmap(fb_img);
}
}catch (Exception ex) {
ex.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,picture");
request.setParameters(parameters);
request.executeAsync();
}
}
如果你想要一个真正的大图片,你至少需要规定一张图片的尺寸 - 比如说。
String profileImg = "https://graph.facebook.com/" + loginResult.getAccessToken().getUserId() + "/picture?type=large&width=1080";
try {
String fbId="970463683015249";
URL fb_url = new URL("http://graph.facebook.com/"+fbId+"/picture?type=small");//small | noraml | large
HttpsURLConnection conn1 = (HttpsURLConnection) fb_url.openConnection();
HttpsURLConnection.setFollowRedirects(true);
conn1.setInstanceFollowRedirects(true);
Bitmap fb_img = BitmapFactory.decodeStream(conn1.getInputStream());
}catch (Exception ex) {
ex.printStackTrace();
}
Facebook图片
https://graph.facebook.com/"+facebookUid+"/picture?height=9999&redirect=0"
Google图片
String googleEmailName = googleEmail.substring(0,googleEmailName.indexOf("@"))
http://picasaweb.google.com/data/entry/api/user/"+googleEmailName+"?alt=json
只需调用此URL:
graph.facebook.com/<facebook_user_id>/picture?type=large
类型可以是大、中或小。
另一种方法是使用ProfilePictureView。
<com.facebook.login.widget.ProfilePictureView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
facebook:preset_size="small"/>
之后,您可以在代码中像这样设置Facebook ID
profilePictureView.setProfileId(facebookUserId);
GraphRequest
获取图片时,您可以传递某些参数。所有这些参数都在https://developers.facebook.com/docs/graph-api/reference/user/picture/上有记录。 - ADM