Xamarin android onActivityResult data.extras возвращает ноль - PullRequest
0 голосов
/ 02 июля 2018

Сделайте это действие, которое позволит мне взять или выбрать телефон, а затем обрезать его и установить его в ImageView. Однако после обрезки изображения возвращается нулевое значение в Bitmap bitmap = (Bitmap) bundle.GetParcelable ("data"); также пробовал Bitmap bitmap = (Bitmap) data.extras.Get ("data"); вот мой код

private void CameraOpen()
    {
        CamIntent = new Intent(MediaStore.ActionImageCapture);
        file = new File(Android.OS.Environment.ExternalStorageDirectory, "file_" + Guid.NewGuid().ToString() + ".jpg");
        uri = Android.Net.Uri.FromFile(file);
        CamIntent.PutExtra(MediaStore.ExtraOutput, uri);
        CamIntent.PutExtra("return-data", true);
        StartActivityForResult(CamIntent, 0);
    }

    private void GaleryOpen()
    {
        GalIntent = new Intent(Intent.ActionPick, MediaStore.Images.Media.ExternalContentUri);
        StartActivityForResult(Intent.CreateChooser(GalIntent, "Select image from galery"), 2);
    }

    protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
    {
        if(requestCode == 0 && resultCode == Result.Ok)
        {

            CropImage();
        }
        else if (requestCode == 2)
        {
            if (data != null)
            {
                uri = data.Data;
                CropImage();
            }
        }
        else if (requestCode == 1)
        {
            if (data != null)
            {
                Bundle bundle = data.Extras;
                Bitmap bitmap = (Bitmap)bundle.GetParcelable("data");
                imgPhoto.SetImageBitmap(bitmap);
            }

        }
    }

    private void CropImage()
    {
        try
        {
            CropIntent = new Intent("com.android.camera.action.CROP");
            CropIntent.SetDataAndType(uri, "image/*");

            CropIntent.PutExtra("crop", "true");
            CropIntent.PutExtra("outputX", 180);
            CropIntent.PutExtra("outputY", 180);
            CropIntent.PutExtra("aspectX", 4);
            CropIntent.PutExtra("aspectY", 4);
            CropIntent.PutExtra("scaleUpIfNeeded", true);
            CropIntent.PutExtra("return-data", "true");

            StartActivityForResult(CropIntent, 1);
        }
        catch (ActivityNotFoundException ex)
        {

        }
    }

Ошибка получения

Необработанное исключение:

System.NullReferenceException:

очень признателен за помощь.

1 Ответ

0 голосов
/ 02 июля 2018

Вы приводите bundle к растровому объекту, а затем используете метод GetParcelable () для растрового объекта. GetParcelable () не является общедоступным методом для растрового объекта, поэтому вы получаете несоответствие типов, которое приводит к пустой ссылке.

https://developer.xamarin.com/api/member/Android.OS.Bundle.GetParcelable/p/System.String/

https://developer.xamarin.com/api/type/Android.Graphics.Bitmap/

...