转换图像并保存在SharedPreferences中不起作用

时间:2017-09-02 15:15:30

标签: android bitmap uri android-sharedpreferences

我想允许用户将图片从图库上传到我正在创建的Android应用程序中。目前,我可以允许用户在下面的代码中选择图库中的图像:

/* Choose an image from Gallery */
void openImageChooser() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);
}

然后onActivityResult我尝试获取图像的路径并将其转换为URI然后我将其转换为Bitmap以在下面的代码中显示给用户:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == PICK_IMAGE) {
            // Get the url from data
            Uri selectedImageUri = data.getData();
            if (null != selectedImageUri) {
                // Get the path from the Uri
                String path = getPathFromURI(selectedImageUri);
                Log.i(TAG, "Image Path : " + path);
                // Set the image in ImageView
                profileImage.setImageURI(selectedImageUri);
            }
            final InputStream imageStream;
            try {
                assert selectedImageUri != null;
                imageStream = getContentResolver().openInputStream(selectedImageUri);
                final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
                encodedImage = encodeImage(selectedImage);
                Log.i("encodedImage", encodedImage);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

        }
    }
}

public String getPathFromURI(Uri contentUri) {
    String res = null;
    String[] proj = {MediaStore.Images.Media.DATA};
    Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
    if (cursor.moveToFirst()) {
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        res = cursor.getString(column_index);
    }
    cursor.close();
    return res;
}

private String encodeImage(Bitmap bm)
{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.JPEG,100,baos);
    byte[] b = baos.toByteArray();
    String encImage = Base64.encodeToString(b, Base64.DEFAULT);

    return encImage;
}

点击下面的这个按钮我想将编码的图像保存到SharedPreferences中,所以当用户再次启动应用程序时,我可以向用户显示该图像但不幸的是我无法获得编码图像而且我不会我知道如何在onCreateView方法上设置它。

btnAddImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("image", encodedImage);
            editor.apply();
            showSnackSuccess();
        }
    });

0 个答案:

没有答案