Исключить исключение указателя при загрузке изображений из галереи.

Это мой код, чтобы получить изображения из галереи. Он дает исключение и сбой в null-указателе. Я тестирую код на самом устройстве, и он падает после того, как я выбрал изображение в галерее. Любые идеи, в которых я ошибаюсь?

                     AlertDialog.Builder builder = new AlertDialog.Builder(CreatePod.this);
                        builder.setMessage("Select") .setCancelable(false).setPositiveButton("Gallery", new DialogInterface.OnClickListener() {
                               public void onClick(DialogInterface dialog, int id) {
                                   Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
                                    gallIntent.setType("image/*"); 
                                    startActivityForResult(gallIntent, 10);
                               }
                        })




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


     super.onActivityResult(requestCode, resultCode, data);






        switch (requestCode) {
        case 10:
            if (resultCode == Activity.RESULT_OK) {
                 Bundle extras = data.getExtras();
                   Bitmap b = (Bitmap) extras.get("data");
                   imgView.setImageBitmap(b);

                String timestamp = Long.toString(System.currentTimeMillis());
                   MediaStore.Images.Media.insertImage(getContentResolver(), b, timestamp, timestamp);
                HttpResponse httpResponse;
                ByteArrayOutputStream bao = new ByteArrayOutputStream();

            b.compress(Bitmap.CompressFormat.JPEG, 100, bao);

            byte [] ba = bao.toByteArray();
            int f = 0;
            String ba1=Base64.encodeToString(ba, f);

Ответ 1

Вместо использования

Bitmap b = (Bitmap) extras.get("data");   
imgView.setImageBitmap(b); 

Используйте следующие строки кода:

Uri imageUri = data.getData(); 
Bitmap b = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
imgView.setImageBitmap(b);

Я изменил ваш код и побежал, он работает для меня!

Ответ 2

Ваша ошибка в том, что фото не возвращается в дополнение. Его Uri находится в getData().

Попробуйте использовать этот код:

        switch (requestCode) {
        case 10:
            if (resultCode == Activity.RESULT_OK) {
                Uri bitmapUri = data.getData();

                try {

                    Bitmap b = Media.getBitmap(getContentResolver(), bitmapUri);
                    mImgView.setImageBitmap(b);

                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                // ... etc ...
                break;
            }
    }

Кроме того, я думаю, что вы слишком много работаете над AlertDialogBuilder. Я просто сделал это:

public void myClickHandler(View clickTarget) {
    Intent gallIntent = new Intent(Intent.ACTION_GET_CONTENT);
    gallIntent.setType("image/*");
    gallIntent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(gallIntent, 10);
}