Как сохранить изображение в файлах приложения?

Есть код, который генерирует QR код:

public class MainActivity extends AppCompatActivity {

EditText etInput;
Button btGenerate;
ImageView ivOutput;

FileOutputStream fileOutputStream;

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

    etInput = findViewById(R.id.et_input);
    btGenerate = findViewById(R.id.bt_generate);
    ivOutput = findViewById(R.id.iv_output);

    File imgFile = new File("/files/QR.png");
    if (imgFile.exists()){
        Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
        ivOutput.setImageBitmap(bitmap);
        btGenerate.setVisibility(View.INVISIBLE);
        etInput.setVisibility(View.INVISIBLE);
    }

    btGenerate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String sText = etInput.getText().toString().trim();
            MultiFormatWriter writer = new MultiFormatWriter();
            try {
                BitMatrix matrix = writer.encode(sText, BarcodeFormat.QR_CODE,
                        350, 350);
                BarcodeEncoder encoder = new BarcodeEncoder();
                Bitmap bitmap = encoder.createBitmap(matrix);
                try {
                    FileOutputStream fileOutputStream = openFileOutput("QR", Context.MODE_PRIVATE);
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
                    fileOutputStream.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                ivOutput.setImageBitmap(bitmap);
                InputMethodManager manager = (InputMethodManager) getSystemService(
                        Context.INPUT_METHOD_SERVICE
                );
                manager.hideSoftInputFromWindow(etInput.getApplicationWindowToken()
                ,0);
                btGenerate.setVisibility(View.INVISIBLE);
                etInput.setVisibility(View.INVISIBLE);
            } catch (WriterException e) {
                e.printStackTrace();
            }
        }
    });

}

}

Мне необходимо сохранить изображение в файлы приложения после генерации и сетить его в виджет при перезагрузке приложения. Если кто-то сталкивался, подскажите на примере моего кода. Буду очень сильно признателен!


Ответы (1 шт):

Автор решения: woesss

В системе нет такого пути: "/files/QR.png"

Если вы сохраняете картинку через поток, открытый как:

openFileOutput("QR", Context.MODE_PRIVATE);

то создать файл, на него указывающий можно так:

File imgFile = new File(getFilesDir(), "QR");
→ Ссылка