2010-12-16 9 views
10

私はAndroidアプリケーションで公式Facebook SDKを使用しています。ユーザがログインした後、私はそうのようなFacebookのユーザーのuidと名前を取得できます。AndroidとFacebook:ログインした写真を取得する方法

Facebook mFacebook = new Facebook(APP_ID); 
// ... user logs in ... 
//String jsonUser = mFacebook.request("me/picture"); // throws error 
String jsonUser = mFacebook.request("me"); 
JSONObject obj = Util.parseJson(jsonUser); 
String facebookId = obj.optString("id"); 
String name = obj.optString("name"); 

また、私はそれらのリンクをプロフィール画像にアクセスできることを知っている:

https://graph.facebook.com/<facebookId>/picture 
https://graph.facebook.com/<facebookId>/picture?type=large 

私はプロフィール画像を作成するためにこのコードを使用したいと考えています:

public static Drawable getPictureForFacebookId(String facebookId) { 

    Drawable picture = null; 
    InputStream inputStream = null; 

    try { 
     inputStream = new URL("https://graph.facebook.com/" + facebookId + "/picture").openStream(); 
    } catch (Exception e) {   
    e.printStackTrace(); 
    return null; 

    } 
    picture = Drawable.createFromStream(inputStream, "facebook-pictures"); 

    return picture; 
} 

しかし、それはうまく動作しません。私はいつも次のエラーを受け取ります:

SSL handshake failure: Failure in SSL library, usually a protocol error 

そして私はこの問題を解決できません。やや複雑なようです(hereまたはhereを参照)。だから私のアプリケーションに正常にログインしたFacebookのユーザーの写真を得るための他のオプションはありますか?

答えて

4

リクエスト( "me/picture")は、サーバーが302(画像URLにリダイレクト)を返し、facebook sdkがこれを処理しないため、エラーをスローします。デコードされたビットマップを取得し、画像表示に割り当てるその後

URL MyProfilePicURL = new URL("https://graph.facebook.com/me/picture?type=normal&method=GET&access_token="+ Access_token); 

IDウルプロファイルである
Bitmap MyprofPicBitMap = null; 
try { 
    MyprofPicBitMap = BitmapFactory.decodeStream(MyProfilePicURL.openConnection().getInputStream()); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

MyProfilePicImageView.setImageBitmap(mIcon1); 
+0

与えられたリンクは死んでいます! – prometheuspk

9

私はまたこの問題を抱えていました。私がしたことは、非同期タスクを使用して画像をダウンロードし、ダウンロードしたばかりの画像でImageViewを設定することでした。コードスニペットを貼り付けます:

ImageView fbUserAvatar = (ImageView) findViewById(R.id.fb_user_avatar); 

private synchronized void downloadAvatar() { 
    AsyncTask<Void, Void, Bitmap> task = new AsyncTask<Void, Void, Bitmap>() { 

     @Override 
     public Bitmap doInBackground(Void... params) { 
      URL fbAvatarUrl = null; 
      Bitmap fbAvatarBitmap = null; 
      try { 
       fbAvatarUrl = new URL("http://graph.facebook.com/"+USER_ID+"/picture"); 
       fbAvatarBitmap = BitmapFactory.decodeStream(fbAvatarUrl.openConnection().getInputStream()); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return fbAvatarBitmap; 
     } 

     @Override 
     protected void onPostExecute(Bitmap result) { 
      fbUserAvatar.setImageBitmap(result); 
     } 

    }; 
    task.execute(); 
} 

このコードは私のために働きます。私もそれがあなたのために働くことを願っています

+1

それがコンパイルされていなかったので、このコードは、ちょうどあなたのために働くことができませんでした。 'AsyncTask'は3つのパラメータをとり、1つではありません(AsyncTask では使用できませんが、AsyncTask は使用できません)。また 'taskComplete'メソッドもありませんが、代わりに' onPostExecute'メソッドがあります。コンパイル可能にするためにコードを編集しました。 – Idolon

+0

私は独自のAsyncTaskを1つのパラメータで使用していますので、うまくいきました。とにかく、編集のおかげで... – Antonio

5

あなたのアクセストークンが含まれている直接URLを要求することができますID ...

22
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); 

+0

素敵でストレートな方法ですが、私はidが "parag.chauhan"のようなユーザーの名前でもあると言うでしょう – MKJParekh

+1

thts true ..しかし、この名前は各ユーザーに使用できません。 –

+1

上位バージョンでは動作しません...これは下位バージョンでは魅力的ですが、上位バージョンでは機能しません。私はそのために何をすべきですか? – AndroidHacker

1

コードを1行追加すると解決されます。

HttpURLConnection.setFollowRedirects(true); 
2

あなたのアプリにプロファイルpicを表示するには、Facebook SDKのProfilePictureViewを使用してください。

はこの

はちょうどそれにsetProfileId(String profileId)を呼び出す参照してください。

画像の表示に注意します。

ProfilePictureView p; 
p = (ProfilePictureView) rootView.findViewById(R.id.fotoPerfil); 
p.setProfileId(usuario.getId()); 

とXMLマークアップ:

0

使用して、この、(usuarioはGraphUserです)

<com.facebook.widget.ProfilePictureView 
    android:id="@+id/profilePicture" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:gravity="center_horizontal" 
    android:layout_marginBottom="10dp" 
    facebook:preset_size="normal"/> 
関連する問題