Хранение изображения в SharedPreferences - PullRequest
0 голосов
/ 07 ноября 2018
mHomePage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(intent, REQUEST_CODE);
        }
    });
    mHomePage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent galleryIntent = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(galleryIntent, RESULT_LOAD);
        }
    });


    return rootView;
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // When an Image is picked
    if (requestCode == RESULT_LOAD && resultCode == RESULT_OK) {
        Uri resultUri = data.getData();
        CropImage.activity(resultUri)
                .start(getActivity());
    }

    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        Uri uri = result.getUri();

        Bitmap realImage = BitmapFactory.decodeStream(uri);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        realImage.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray();

        String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);

        SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(getActivity());
        SharedPreferences.Editor edit=shre.edit();
        edit.putString("image_data",encodedImage);
        edit.commit();

    }

Попытка сохранить изображение в sharedpreference путем кодирования, но я новичок в этом и не могу понять это. Я видел некоторые вопросы, связанные с этой проблемой, но они не ясны. Может кто-нибудь помочь мне с тем, как сохранить путь / изображение в SharedPreferences?

Код даже не компилируется, так как я поместил URI в Inout Stream в .decodeStream().

1 Ответ

0 голосов
/ 07 ноября 2018

Uri указывает на путь, в котором хранится изображение, поэтому сначала вам нужно будет прочитать его с помощью InputStream.

Этот код исправит ошибку компиляции. В качестве побочного узла используйте edit.apply() вместо edit.commit().

if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
    try
    {
        InputStream ims = getContentResolver().openInputStream(uri);
        Bitmap realImage = BitmapFactory.decodeStream(uri);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        realImage.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray();

        String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);

        SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor edit=shre.edit();
        edit.putString("image_data",encodedImage);
        //edit.commit();
        edit.apply();
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }
}

Однако, я не вижу смысла хранить изображение в SharedPreferences? Это на самом деле не предназначено для этого. Почему бы вам не сохранить файл в context.getFilesDir() и не прочитать его оттуда, когда вам это нужно? Это лучше, чем кодировать / декодировать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...