如何将图像存储到ORMLite

时间:2018-09-02 13:13:40

标签: android sqlite ormlite

我有一个应用程序,每个成员都有个人资料照片。用户可以从图库中选择图像。我将把用户个人资料图像存储到ORMLite数据库中。

     profileImage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(
                            Intent.ACTION_PICK,
                            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    startActivityForResult(i, 999);
                }
            });

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 999 && resultCode == RESULT_OK && data != null && data.getData() != null) {
            Uri uri = data.getData();
            try {
                photo = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                profileImage.setImageBitmap(photo);
                user.setMember_picture(imageToByte(photo));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private byte[] imageToByte(Bitmap b){
        ByteArrayOutputStream outputstream = new ByteArrayOutputStream();
        b.compress(Bitmap.CompressFormat.PNG, 0, outputstream);
        return outputstream.toByteArray();
    }

在您的课程中:

  @DatabaseField(columnName = "PICTURE", dataType = DataType.BYTE_ARRAY)
    private byte[] member_picture;

但是它不起作用!

2 个答案:

答案 0 :(得分:1)

您可以将图像作为字符串存储在数据库中。为此,您必须使用Base64类,例如:

private String imageToString(Bitmap b){
    ByteArrayOutputStream outputstream = new ByteArrayOutputStream();
    b.compress(Bitmap.CompressFormat.PNG, 0, outputstream);
    return Base64.encodeToString(outputstream.toByteArray(), Base64.DEFAULT);         
}  

但是请不要忘记更新您的DataType中的@DatabaseField

答案 1 :(得分:0)

将图像(或与此相关的任何类型的文件)存储在数据库中通常是次优的解决方案,因为从IO角度来看,访问它们可能非常昂贵且缓慢。当您的用户选择特别大的图像时,这个问题可能会更加复杂。

一个好的且常用的做法是保存图像文件的副本,然后在数据库中存储该文件的路径。