ユーザーのプロフィール写真をリストビューで表示したい。 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=)、次のようなURLで画像が返されますhttps://fbcdn-profile-a.akamaihd.net/...
画像はどの形式で配信されますか?画像(url)への参照を持つJSON?
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の1つです。
詳細については、これを確認してください グラフAPIのリファレンス
............................
私はこの質問が古いことを知っていますが、今日のユーザーの写真を簡単に取得する別の方法があります。
まず、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年)、物事のやり方が変わりました。
画像ビューの代わりに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);
この助けを願っています。
ログインしたユーザーのFacebookユーザー画像を取得する簡単な方法があります。
コードを機能させるには、次のインポートステートメントを追加します。
import com.facebook.Profile;
以下の例を参照してください(この例では、イメージを設定するために Picassoライブラリ を使用しています)。
Uri imageUri = Profile.getCurrentProfile().getProfilePictureUri(400, 400);
Picasso.with(this).load(imageUri).into(imageView);
400と400はそれぞれ画像の幅と高さです。
別の方法で書くことができます:
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);
以下のコードを使用して、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();
および詳細情報を参照してください これ
ユーザー画像を取得するのは簡単です
String UserImageUrl="https://graph.facebook.com/" + facebookUser.getFacebookID() + "/picture?type=large";
Glide.with(getApplicationContext()).load(UserImageUrl).placeholder(R.drawable.ic_launcher).into(profileImage);
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>
それが役に立てば幸い !