2

LinearlayoutFacebookのプロフィール写真をアプリケーションの背景として設定しようとしましたが、うまくいきませんでした。私がこれをやろうとした2つの方法は次のとおりです。

最初の方法:プロフィール写真から uri を取得し、drawable に変換しました

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);
    LinearLayout banner = (LinearLayout)findViewById(R.id.banner);
       Profile profile = Profile.getCurrentProfile();
        if(profile != null){
           // profile_pic_id.setProfileId((profile.getId()));
            Drawable d;
            Uri uri = profile.getLinkUri();
            //also tried profile.getProfilePictureUri(random_num,random_num)
            try {

                InputStream inputStream = getContentResolver().openInputStream(uri);
                 d = Drawable.createFromStream(inputStream, uri.toString());
            } catch (FileNotFoundException e) {
                d = getResources().getDrawable(R.drawable.blue_material);
            }
            banner.setBackgroundDrawable(d);
        }
}

今、これは常に例外をスローしたので、Drawable私が得るのは blue_material のもの ( Drawablecatch ブロックのセット) です。

2 番目の方法:をに変換し、ProfilePictureViewImageView使用getDrawable()ImageViewます。

 ProfilePictureView profilePictureFB=(ProfilePictureView)findViewById(R.id.pic);
 profilePictureFB.setProfileId((profile.getId()));
 ImageView fbImage = ( ( ImageView)profilePictureFB.getChildAt( 0));
 banner.setBackgroundDrawable(fbImage.getDrawable());

これにより、誰かがプロフィール写真を持っていないときにFacebookが配置するデフォルトの写真を背景に持つことになりました。

そして、 decodeStreamを使用するたびに例外がスローされます (以下の例)。

URL img_url =new URL("https://graph.facebook.com/"+profile.getId()+"/picture?type=normal");
                Bitmap bmp =BitmapFactory.decodeStream(img_url.openConnection().getInputStream());//bmp a bitmap

自分で解決したかったので、stackoverflowでこの質問をすることに頼りたくありませんでしたが、非常に長い間試みたので、助けが必要でした.

答えてくれてありがとう:)

4

2 に答える 2

3

解決しました!!

私はimageLoaderを使用しましたが、何らかの理由でURLが機能します。コードは次のとおりです。

        imageView = (ImageView) findViewById(R.id.pic);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageLoader = ImageLoader.getInstance();

        Profile profile = Profile.getCurrentProfile();
        if(profile != null){           
            DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true).build();
            imageLoader.displayImage("http://graph.facebook.com/" + profile.getId() + "/picture?width=400&height=400", imageView, options);
           // banner.setBackgroundDrawable(imageView.getDrawable());
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);

このメソッドsetScaleTypeは、イメージビューをすべてのLinearLayout. ユニバーサル イメージ ローダーの詳細については、次のリンクにアクセスしてください: https://github.com/nostra13/Android-Universal-Image-Loader

于 2015-05-15T16:23:36.587 に答える
1

よくわかりませんが、これは私がかつてやっていたことです

 img_url =new URL("https://graph.facebook.com/"+uname+"/picture?type=normal");
     bmp =BitmapFactory.decodeStream(img_url.openConnection().getInputStream());//bmp a bitmap
     linearlayout.setImageBitmap(bmp);//your linear layout
于 2015-05-15T14:44:20.487 に答える