Android: 将内部存储中的图像保存到 SharedPreferences 并显示

Android: Save image from Internal storage in SharedPreferences and display it

我正在尝试从我的 phone 加载图像并将其应用到 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);
        }
}

我做错了什么?

您忘记初始化编辑器将其添加到您的活动结果中

      editor=sharedPref.edit()
      editor.putString("imageURI", imageUri.toString());
      editor.commit();

这个错误是因为你的编辑器是空的。试试这个

@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);
        }
}