如何在 Android 中获取 Facebook 个人资料图片
How to get Facebook profile image in Android
我在 android 中使用 Facebook sdk 4.4.0,我想使用图形请求获取用户的当前个人资料图片。怎么做?
我看到有人用
https://graph.facebook.com/me/picture?access_token=ACCESS_TOKEN
API 提取个人资料照片,但我不知道如何从中提取个人资料照片。
简单地称之为 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);
您可以通过两种不同的方式获得它。
方式一:集成图api支持
https://developers.facebook.com/docs/graph-api/reference/user/picture/
方式2:通过Get Call
http://graph.facebook.com/{facebook-Id}/picture?width=x&height=y
其中 x 和 y 可以是任何整数,例如100
您需要调用 GraphRequest API 来获取用户的所有详细信息,其中 API 还提供 URL 当前个人资料照片。
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();
如果您想要真正的大图片,则必须指定规格。至少一种尺寸的图片 - 例如
String profileImg = "https://graph.facebook.com/" + loginResult.getAccessToken().getUserId() + "/picture?type=large&width=1080";
此外,您可以指定两种尺寸(添加 &height=some_val),但 Facebook 将裁剪此个人资料图片。
从上一个 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");
}
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();
}
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();
}
}
从 Facebook 获取图像
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'
facebook 图片
https://graph.facebook.com/" +facebookUid + "/picture?height=9999&redirect=0"
google 图片
字符串 googleEmailName = googleEmail.substring(0,googleEmailName.indexOf("@"))
http://picasaweb.google.com/data/entry/api/user/"+googleEmailName+"?alt=json
我在 android 中使用 Facebook sdk 4.4.0,我想使用图形请求获取用户的当前个人资料图片。怎么做?
我看到有人用
https://graph.facebook.com/me/picture?access_token=ACCESS_TOKEN
API 提取个人资料照片,但我不知道如何从中提取个人资料照片。
简单地称之为 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);
您可以通过两种不同的方式获得它。
方式一:集成图api支持 https://developers.facebook.com/docs/graph-api/reference/user/picture/
方式2:通过Get Call http://graph.facebook.com/{facebook-Id}/picture?width=x&height=y
其中 x 和 y 可以是任何整数,例如100
您需要调用 GraphRequest API 来获取用户的所有详细信息,其中 API 还提供 URL 当前个人资料照片。
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();
如果您想要真正的大图片,则必须指定规格。至少一种尺寸的图片 - 例如
String profileImg = "https://graph.facebook.com/" + loginResult.getAccessToken().getUserId() + "/picture?type=large&width=1080";
此外,您可以指定两种尺寸(添加 &height=some_val),但 Facebook 将裁剪此个人资料图片。
从上一个 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");
}
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();
}
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();
}
}
从 Facebook 获取图像
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'
facebook 图片
https://graph.facebook.com/" +facebookUid + "/picture?height=9999&redirect=0"
google 图片
字符串 googleEmailName = googleEmail.substring(0,googleEmailName.indexOf("@"))
http://picasaweb.google.com/data/entry/api/user/"+googleEmailName+"?alt=json