Java 当我想要更改imageView时,intent.getData()为null

Java 当我想要更改imageView时,intent.getData()为null,java,android,Java,Android,我想在单击imageView时更改我的头像 代码: ivAvatar.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { final CharSequence[] items = {"Prendre une photo", "Choisir une image", "Annuler"}

我想在单击imageView时更改我的头像

代码:

ivAvatar.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            final CharSequence[] items = {"Prendre une photo",
                    "Choisir une image", "Annuler"};

            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    getActivity());

            // set title
            alertDialogBuilder.setTitle("Avatar :");

            // set dialog message
            alertDialogBuilder.setCancelable(false).setItems(items,
                    new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int item) {

                    if (item == 0) {
                        ContentValues values = new ContentValues();
                        values.put(MediaStore.Images.Media.TITLE,
                                "");
                        mCapturedImageURI = getActivity()
                                .getContentResolver()
                                .insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                                        values);

                        Intent intent = new Intent(
                                MediaStore.ACTION_IMAGE_CAPTURE);

                        intent.putExtra(MediaStore.EXTRA_OUTPUT,
                                mCapturedImageURI);
                        intent.putExtra("crop", "true");
                        intent.putExtra("aspectX", 170);
                        intent.putExtra("aspectY", 170);
                        intent.putExtra("outputX", 5000);
                        intent.putExtra("outputY", 5000);
                        startActivityForResult(Intent
                                .createChooser(intent,
                                        "Appareil photo"),
                                        CAPTURE_PICTURE);
                    }

                    if (item == 1) {
                        Intent intent = new Intent(
                                Intent.ACTION_PICK, 
                                android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);

                        intent.setType("image/*");
                        intent.putExtra("crop", "true");
                        intent.putExtra("aspectX", 170);
                        intent.putExtra("aspectY", 170);
                        intent.putExtra("outputX", 5000);
                        intent.putExtra("outputY", 5000);
                        startActivityForResult(Intent
                                .createChooser(intent,
                                        "Choisir une application"),
                                        SELECT_PICTURE);
                    }

                    if (item == 2) {
                        dialog.cancel();
                    }

                }
            });

            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();

            // afficher
            alertDialogBuilder.show();

        }
    });

public void onActivityResult(int requestCode, int resultCode, Intent data) {

    Log.i("TAG", data + " : data");
    Log.i("TAG", data.getData() + " : data.getData()");
    Log.i("TAG", getActivity().getApplicationContext() + " : context");

    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == CAPTURE_PICTURE) {

            try {
                ivAvatar.setImageBitmap(decodeUri(getActivity().getApplicationContext(),
                        mCapturedImageURI, 1000));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

        if (requestCode == SELECT_PICTURE) {

            Uri selectedimg = data.getData();
            try {
                ivAvatar.setImageBitmap(decodeUri(getActivity().getApplicationContext(), selectedimg, 170));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
}

public static Bitmap decodeUri(Context c, Uri uri, final int requiredSize)
        throws FileNotFoundException {
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    BitmapFactory.decodeStream(c.getContentResolver().openInputStream(uri),
            null, o);

    int widthTmp = o.outWidth, heightTmp = o.outHeight;
    int scale = 1;

    while (true) {
        if (widthTmp / 2 < requiredSize || heightTmp / 2 < requiredSize) {
            break;
        }
        widthTmp /= 2;
        heightTmp /= 2;
        scale *= 2;
    }

    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inSampleSize = scale;
    return BitmapFactory.decodeStream(c.getContentResolver()
            .openInputStream(uri), null, o2);
}

为什么
data.getData()==null

在Nexus4和Kitkat上尝试了它。如果我选择standard gallery,data.getData()对我来说也是空的。对于QuickPic或其他库,getData()返回了正确的uri

如果getData()为null,请尝试以下操作:

     Bundle bundle = data.getExtras();
     Bitmap bitmap = (Bitmap) bundle.get("data");
bundle中还有一个条目的键为“cropped rect”

     Bundle bundle = data.getExtras();
     Bitmap bitmap = (Bitmap) bundle.get("data");