Android: сохранить изображение из внутреннего хранилища в SharedPreferences и отобразить его - PullRequest
0 голосов
/ 17 марта 2020

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

. Я пытаюсь сделать что-то подобное с общими настройками. Но я получаю следующую ошибку:

 Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences$Editor.putString(java.lang.String, java.lang.String)' on a null object reference
   private static final int PICK_IMAGE = 100;
   static SharedPreferences sharedPref;
   static SharedPreferences.Editor editor;
   private static final String PREFS_NAME = "preferenceName";
   Uri imageUri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        PROFILE_IMG = (ImageView)findViewById(R.id.profile_image);
        PHOTObutton = (Button)findViewById(R.id.photo_btn);

       // Get from the SharedPreferences
        sharedPref = getApplicationContext().getSharedPreferences(PREFS_NAME, 0);

        String imageUriString = sharedPref.getString("imageURI", null);
        Uri imageUri = Uri.parse(imageUriString);
        PROFILE_IMG.setImageURI(imageUri);

        //open gallery-- select profile photo
        PHOTObutton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                openGallery();
            }
        });

    }
    private void openGallery() {
        Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
        startActivityForResult(gallery, PICK_IMAGE);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == PICK_IMAGE){
            imageUri = data.getData();

            sharedPref = getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
            editor.putString("imageURI", imageUri.toString());
            editor.commit();

            PROFILE_IMG.setImageURI(imageUri);
        }
}

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Эта ошибка из-за того, что ваш редактор пуст. Попробуйте это

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == PICK_IMAGE){
            imageUri = data.getData();

            SharedPreferences.Editor editor = getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit();
            editor.putString("imageURI", imageUri.toString());
            editor.commit();

            PROFILE_IMG.setImageURI(imageUri);
        }
}
0 голосов
/ 17 марта 2020

Вы забыли инициализировать редактор, добавьте это в свой результат активности

      editor=sharedPref.edit()
      editor.putString("imageURI", imageUri.toString());
      editor.commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...