我想在列表视图中显示用户个人资料图片。 当我尝试从android调用graph-api来检索图像时,我总是得到以下错误。
java.io.IOException: Hostname <fbcdn-profile-a.akamaihd.net> was not verified
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.getSecureSocket(HttpConnection.java:170)
at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnection$HttpsEngine.connect(HttpsURLConnection.java:398)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.sendRequest(HttpURLConnection.java:1224)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.doRequestInternal(HttpURLConnection.java:1558)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.doRequest(HttpURLConnection.java:1551)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1052)
at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnection.getInputStream(HttpsURLConnection.java:252)
at com.facebook.android.Util.openUrl(Util.java:200)
at com.facebook.android.Facebook.request(Facebook.java:559)
这是我使用的代码:
private static void retrieveProfilePicture(String userId) throws MalformedURLException, IOException{
facebook = FacebookHelper.getInstance();
Bundle bundle = new Bundle();
bundle.putString(Facebook.TOKEN, facebook.getAccessToken());
Object picture = facebook.request("/"+userId+"/picture", bundle, "GET");
当我在浏览器中执行相同的调用(https://graph.facebook.com//picture?access_token=)时,我会在这样的网址上返回图片
https://fbcdn-profile-a.akamaihd.net/...
以何种格式传送给我?带有引用映像的JSON(url)?
答案 0 :(得分:83)
ImageView user_picture;
userpicture=(ImageView)findViewById(R.id.userpicture);
URL img_value = null;
img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large");
Bitmap mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
userpicture.setImageBitmap(mIcon1);
其中ID是您的个人资料ID。
有关详细信息,请查看此Reference for Graph API
............................
答案 1 :(得分:16)
我知道这个问题有点陈旧,但现在还有另一种方法可以轻松获取用户的照片。
首先,在xml布局中使用:
<com.facebook.widget.ProfilePictureView
android:id="@+id/userImage"
android:layout_width="69dp"
android:layout_height="69dp"
android:layout_gravity="center_horizontal" />
然后在你的片段或活动中,在onSessionStateChange:
方法中private void onSessionStateChange(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
Log.i(TAG, "Logged in...");
// Request user data and show the results
Request.newMeRequest(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
//HERE: DISPLAY USER'S PICTURE
userPicture.setProfileId(user.getId());
}
}
}).executeAsync();
} else if (state.isClosed()) {
Log.i(TAG, "Logged out...");
userPicture.setProfileId(null);
}
}
希望这可以帮助某人。我遇到了同样的问题而且我得到了这个帖子,但它是2011年。今天(2013年),做事的方式发生了变化。
答案 2 :(得分:6)
你可以通过使用ProfilePictureView而不是图像视图来实现它:
<com.facebook.widget.ProfilePictureView
android:id="@+id/friendProfilePicture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:padding="5sp"
facebook:preset_size="small" />
您可以将尺寸设置为小/普通/大/自定义。
然后在你的代码中,设置用户的facebook id如下:
ProfilePictureView profilePictureView;
profilePictureView = (ProfilePictureView) findViewById(R.id.friendProfilePicture);
profilePictureView.setProfileId(userId);
希望得到这个帮助。
答案 3 :(得分:3)
有一种简单的方法可以为登录用户获取Facebook用户图像。
要使代码工作,请添加以下导入语句:
import com.facebook.Profile;
请参阅下面的示例(在此示例中,我使用Picasso library来设置图片):
Uri imageUri = Profile.getCurrentProfile().getProfilePictureUri(400, 400);
Picasso.with(this).load(imageUri).into(imageView);
数字400和400分别是图像宽度和高度。
答案 4 :(得分:2)
可以用其他方式编写:
ImageView user_picture;
ImageView userpicture = (ImageView)findViewById(R.id.userpicture);
URL img_value = null;
try {
img_value = new URL("http://graph.facebook.com/"+"100004545962286"+"/picture?type=large");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Bitmap mIcon1 = null;
try {
mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
userpicture.setImageBitmap(mIcon1);
答案 5 :(得分:2)
使用以下代码获取Facebook Graph API
的用户个人资料图片。
ImageView profileImage = (ImageView) findViewById(R.id.profileImage);
Bundle params = new Bundle();
params.putBoolean("redirect", false);
params.putString("type", "large");
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"me/picture",
params,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
try {
String picUrlString = (String) response.getJSONObject().getJSONObject("data").get("url");
Glide.with(getApplicationContext()).load(picUrlString).placeholder(R.drawable.ic_launcher).into(profileImage);
} catch (JSONException | IOException e) {
e.printStackTrace();
}
}
}
).executeAsync();
更多信息请参阅This
获取用户形象简单
String UserImageUrl="https://graph.facebook.com/" + facebookUser.getFacebookID() + "/picture?type=large";
Glide.with(getApplicationContext()).load(UserImageUrl).placeholder(R.drawable.ic_launcher).into(profileImage);
答案 6 :(得分:0)
private String facebookUser;
AccessToken token;
token = AccessToken.getCurrentAccessToken();
facebookUser = AccessToken.getCurrentAccessToken().getUserId();
ProfilePictureView profilePictureView;
profilePictureView = (ProfilePictureView) findViewById(R.id.facebookUser);
xml
<com.facebook.login.widget.ProfilePictureView
android:id="@+id/facebookUser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"></com.facebook.login.widget.ProfilePictureView>
希望它有所帮助!