繁体   English   中英

Android:从 SharedPreferences 中的内部存储保存图像并显示它

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

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

我究竟做错了什么?

此错误是因为您的编辑器为空。 尝试这个

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM