【问题标题】:Storing image in SharedPreferences在 SharedPreferences 中存储图像
【发布时间】:2019-04-10 15:17:23
【问题描述】:
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 中存储路径/图像吗?

代码甚至没有编译,因为我在 .decodeStream() 的 inout 流中放入了一个 uri。

【问题讨论】:

    标签: java android xml android-studio sharedpreferences


    【解决方案1】:

    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() 并在需要时从那里读取呢?它比编码/解码更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2016-01-07
      • 2015-02-22
      • 2012-02-01
      相关资源
      最近更新 更多