2

ビットマップを必要とするメソッドで使用できるように、Facebook から返されたプロフィール画像を変換してビットマップに変更しようとしています。以下のコードを使用してプロファイル画像を取得し、それを ProfilePictureView に入れることができます。また、テスト用に他に 2 つのビューを作成しました... CircleImageView と ImageView です。これまでのところ、ProfilePictureView だけが画像を表示しています。これは私が試したコードの例ですが、ビットマップを作成するために Web で見つけたいくつかの方法を試しましたが、どれもうまくいきませんでした。どんな提案/解決策も大歓迎です!

    ProfilePictureView profilePictureView;
    profilePictureView = (ProfilePictureView) findViewById(R.id.facebookPictureView);
    profilePictureView.setProfileId(userId);  //this works to get and set the profile pic

    standardImageView = (ImageView) findViewById(R.id.imageView);
    circleImageView = (CircleImageView) findViewById(R.id.profImage);

    AsyncTask<Void, Void, Bitmap> t = new AsyncTask<Void, Void, Bitmap>() {
        protected Bitmap doInBackground(Void... p) {
            Bitmap bmp = null;
            try {
                URL aURL = new URL("http://graph.facebook.com/" + userId + "/picture?type=large");
                URLConnection conn = aURL.openConnection();
                conn.setUseCaches(true);
                conn.connect();
                InputStream is = conn.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);
                bmp = BitmapFactory.decodeStream(bis);
                bis.close();
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return bmp;
        }

        protected void onPostExecute(Bitmap bmp) {

            standardImageView.setImageBitmap(bmp);
            circleImageView.setImageBitmap(bmp);
        }
    };
    t.execute();

デバッガーを使用してステップスルーすると、bmp が null であることがわかりました。他のいくつかの方法を試しましたが、同じことが起こりました。ヘルプ!

4

3 に答える 3

2

ピカソにとってより良いオプションであるグライドも使用することを決定することもできます

Bitmap theBitmap = null;
theBitmap = Glide.
      with(getActivigetApplicationContext()).
      load("your image url here").
      asBitmap().
      into(-1, -1).
      get();
于 2015-09-30T04:01:12.593 に答える
0

このスニペットを bitbucket で使用する

ライブラリのように扱うことができます

于 2015-09-30T04:25:37.090 に答える
0
 Uri imageUri;
  String urlImage = null;
 String id = null;

// このメソッドは、ユーザーの ID を取得するために使用されます

 GraphRequest request = GraphRequest.newMeRequest(
                    AccessToken.getCurrentAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object, GraphResponse response) {
                            try {

                            id =  object.getString("id"));

                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    });
            Bundle params = new Bundle();
            params.putString("fields", "id,name,link,picture");
            request.setParameters(params);
            request.executeAsync();

// このメソッドは、ユーザーのプロフィール写真を取得し、Picasso を使用して画像ビューに画像を配置するために使用されます。これを使用している間は、ビットマップ オブジェクトを取得する必要はありません。Picasso は文字列を直接ビットマップに変換します。

urlImage = "https://graph.facebook.com/" + id + "/picture?width=" + AppController.convertDpToPx(60);
                    Log.d("url", urlImage);
                    imageUri = Uri.parse(urlImage);
                    if (!urlImage.isEmpty()) {
                        Picasso.with(getApplicationContext())
                                .load(urlImage)
                                .resize(AppController.convertDpToPx(60), 0)
                                .into(mTarget);
                    }



 private Target mTarget = new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) {

            mibProfileButton.setScaleType(ImageView.ScaleType.CENTER_CROP);
            mibProfileButton.setImageBitmap(getRoundedCornerBitmap(bitmap, bitmap.getWidth() * 17/60));

        }

        @Override
        public void onBitmapFailed(Drawable drawable) {
            AppController.getInstance().showError(R.string.error_image, R.drawable.repeating_bg_error);
        }

        @Override
        public void onPrepareLoad(Drawable drawable) {

        }
    };
于 2015-09-30T03:57:59.990 に答える