попробуйте сохранить во внутреннем растровом изображении - PullRequest
0 голосов
/ 10 февраля 2019

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

package com.e.test;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

глобальные переменные:

    final int CAMERA_REQUEST = 1;
    ImageView imageview;
    Bitmap bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

это изображение загрузки:

        try {
            FileInputStream fis = openFileInput("pictures");
            bitmap = BitmapFactory.decodeStream(fis);
            imageview.setImageBitmap(bitmap);
            fis.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        Button btn = findViewById(R.id.btn);
        imageview = findViewById(R.id.image_result);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent,CAMERA_REQUEST);

            }
        });
    }

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

        if(requestCode == CAMERA_REQUEST && resultCode == RESULT_OK)
        {
            bitmap = (Bitmap)data.getExtras().get("data");
            imageview.setImageBitmap(bitmap);
        }
    }

это сохранение:

    @Override
    protected void onPause() {
        super.onPause();
        try {
            FileOutputStream fos = openFileOutput("pictures",MODE_PRIVATE);
            bitmap.compress(Bitmap.CompressFormat.JPEG,50,fos);
            fos.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

1 Ответ

0 голосов
/ 10 февраля 2019

NullPointerException происходит, потому что ваш экземпляр bitmap равен нулю.Не уверен, как вы используете этот код, но вы можете добавить нулевую проверку, чтобы гарантировать, что bitmap не равно нулю каждый раз, когда вы выполняете над ним операции (например, сжимаете его).Тогда ваше приложение не рухнет.как это:

@Override
protected void onPause() {
    super.onPause();
    try {
        if(bitmap != null){
            FileOutputStream fos = openFileOutput("pictures",MODE_PRIVATE);
            bitmap.compress(Bitmap.CompressFormat.JPEG,50,fos);
            fos.close();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...