Получить растровое значение null, даже если объявлено

Я использую фрагменты, чтобы открыть камеру с помощью намерений. Но когда я устанавливаю свой ImageView, используя растровое изображение, я получаю исключение нулевого указателя.

КОД

public class UploadDocument extends MasterFragment implements View.OnClickListener {

    private TextView label;
    private Button btChooseDoc, btDocumentType, btUpload, btCancel;
    private EditText etTitle;
    private String[] chooseDocumentArray;
    private String userSelection = "";
    ImageView image;
    private Intent intent;
    Bitmap camera;

    public void onClick(View view) {

        setUp();


        switch (view.getId()) {

            case R.id.bt_choose_file:

                displayPopup(getActivity(), "Choose File", chooseDocumentArray, btChooseDoc, false, new GetNamePosition() {
                    @Override
                    public void getName(String name) {
                        userSelection = name;
                        if (userSelection.equals("Gallery")) {
                          intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                            startActivityForResult(intent, 0);
                            btChooseDoc.setText("Choose File");
                        }

                        if (userSelection.equals("Camera")) {
                            intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                            startActivityForResult(intent, 1);
                            btChooseDoc.setText("Choose File");
                        }

                        if (userSelection.equals("Other")) {
                            intent = new Intent(Intent.ACTION_GET_CONTENT);
                            intent.setType("file/*");
                            startActivityForResult(intent, 2);
                            btChooseDoc.setText("Choose File");
                        }
                    }

                    @Override
                    public void getPosition(int position) {

                    }
                });


        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode==1 && resultCode==getActivity().RESULT_OK){

            camera= (Bitmap) data.getExtras().get("data");
            camera.compress(Bitmap.CompressFormat.JPEG,100,null);
            image.setImageBitmap(camera);

        }

    }

LogCat

Caused by: java.lang.NullPointerException
            at android.graphics.Bitmap.compress(Bitmap.java:890)
            at example.com.pocketdocs.UploadDocument.UploadDocument.onActivityResult(UploadDocument.java:108)
            at android.app.Activity.dispatchActivityResult(Activity.java:5315)
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3529)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3576)
            at android.app.ActivityThread.access$1100(ActivityThread.java:165)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5370)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            at dalvik.system.NativeStart.main(Native Method)

Я использую фрагменты, чтобы открыть камеру с помощью намерений. Но когда я устанавливаю свой ImageView, используя растровое изображение, я получаю исключение нулевого указателя. Я объявил растровое изображение выше, но все же я нулевой указатель

2 ответа

Решение

Как вы не опубликовали log cat, Я думаю, что проблема произошла

camera= (Bitmap) data.getExtras().get("data"); 

camera является nullИтак, вы получаете NPE, Это должно быть

camera= (Bitmap) data.getExtra("data");

также измените условие в onActivityResult(...)

if(requestCode==1 && resultCode==getActivity().RESULT_OK && data != null)

Пробовать recycle растровое изображение, которое вы использовали, в противном случае оно вызывает исключение из памяти

image.setImageBitmap(camera);
camera.recycle();

Вы можете попробовать это -

image.post(
new Runnable(){
    image.setImageBitmap(camera)
});

нужны данные logcat, чтобы дать конкретное решение.

Другие вопросы по тегам