Сохранение выбранной картинки и ее автоматическая загрузка при запуске приложения
При нажатии на кнопку open открывается галерея, после чего imageView отображает выбранное пользователем изображение. Это работает, но как сделать, чтобы это изображение сохранялось, и автоматически подгружалось при запуске приложения? Я нашел способ, но мне не удается встроить его конкретно в этот код:
package com.dennysnumb.app;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.content.SharedPreferences;
import java.io.File;
public class MainActivity extends AppCompatActivity {
Button open;
ImageView photoRegistration;
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sharedpreferences = getSharedPreferences("app_data", Context.MODE_PRIVATE);
String saved = sharedpreferences.getString("path", "");
photoRegistration = (ImageView)findViewById(R.id.imageView);
photoRegistration.setImageURI(Uri.fromFile(new File(saved )));
open = (Button) findViewById(R.id.opgalbtn);
open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
final int SELECT_PHOTO = 1234;
startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch (requestCode) {
case 1234:
if (resultCode == RESULT_OK) {
Uri selectedImage = imageReturnedIntent.getData();
ImageView photoRegistration = (ImageView) findViewById(R.id.imageView);
photoRegistration.setImageURI(selectedImage);
String pathData = selectedImage.toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("path", pathData).apply();
}
}
}
}
Ответы (1 шт):
Так как у вас картинка будет в галерее и после закрытия приложения, я бы советовал вам сохранять не картинку, а путь к ней. Дальше при запуске приложения, вам просто нужно будет взять сохраненный путь и оттуда достать картинку. Чтобы сохранить путь, можно использовать SharedPreferences. При выборе картинки берете путь и сохраняете его в памяти. Перед функцией onCreate() делаете глобальную переменную:
SharedPreferences sharedpreferences
дальше в функции onCreate() эту переменную инициализируете:
sharedpreferences = getSharedPreferences("app_data", Context.MODE_PRIVATE);
дальше в функции onActivityResult добавляете этот код:
String pathData = selectedImage.toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("path", pathData).apply();
в качестве данных для сохранения берем то что возвращает intent:
Uri selectedImage = imageReturnedIntent.getData();
и дальше при загрузке приложения в функции onCreate() берете путь из памяти:
sharedpreferences.getString("path", "")
И дальше уже все то же самое что вы делаете при выборе картинки через диалог. Вот туториал как работать с настройками. Возьмем ситуацию, когда пользователь удалил картинку из галереи. Чтобы приложение работало и дальше без сбоев, можно сохранить картинку в папку приложения, куда пользователь доступа чаще всего не имеет. Это делается так:
File source = new File(imageReturnedIntent.getData().toString());
File destination = getFilesDir();
try
{
FileUtils.copyFile(source, destination);
}
catch (IOException e)
{
e.printStackTrace();
}
и теперь у вас есть как-бы резервная копия вашей картинки на случай ее удаления из галереи. Вот интересные статья_1, статья_2 которые будут полезны при решении вашей проблемы.