【问题标题】:How to insert image in SQLite database from gallery?如何从图库中将图像插入 SQLite 数据库?
【发布时间】:2021-09-13 03:03:27
【问题描述】:

我一直在尝试从图库中的 sqlite 中插入图像。在 onCreate 我必须检查 如果用户还没有上传图像,它应该显示来自drawable的图像,如果他这样做了,它应该从sqlite获取图像。但它没有插入。

这是我的 Java 类

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tela_editar_perfil);

    Usuario usuario = getIntent().getParcelableExtra("usuario");


    fotoUsuario = findViewById(R.id.fotoUsuario);
    dao = new ImagemDAO(this);

    Imagem imagem = dao.select(usuario.getNome());

    if (imagem == null) {
        Uri imgUri = Uri.parse("android.resource://my.package.name/" + R.drawable.icone_perfil);
        fotoUsuario.setImageURI(imgUri);


    } else {
        Bitmap bitmap = getImage(imagem.getImagem());
        fotoUsuario.setImageBitmap(bitmap);

    }


    btnVoltar = findViewById(R.id.btnVoltar);
    btnVoltar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(EditarPerfilActivity.this, TelaPerfilActivity.class);
            Usuario usuario = getIntent().getParcelableExtra("usuario");
            intent.putExtra("usuario", usuario);
            startActivity(intent);
        }
    });

    btnEditarImagemPerfil = findViewById(R.id.btnEditarFotoPerfil);
    btnEditarImagemPerfil.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (ActivityCompat.checkSelfPermission(EditarPerfilActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(EditarPerfilActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
                return;
            }
            Intent intent = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(intent, RESULT_LOAD_IMAGE);

        }
    });

    btnAlterarSenha = findViewById(R.id.btnAlterarSenha);
    btnAlterarSenha.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(EditarPerfilActivity.this, TelaAlterarSenhaActivity.class);
            Usuario usuario = getIntent().getParcelableExtra("usuario");
            intent.putExtra("usuario", usuario);
            startActivity(intent);
            
        }
    });

    btnSalvarPerfil = findViewById(R.id.btnSalvarPerfil);
    btnSalvarPerfil.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(EditarPerfilActivity.this, TelaPerfilActivity.class);
            Usuario usuario = getIntent().getParcelableExtra("usuario");
            intent.putExtra("usuario", usuario);
            startActivity(intent);
        }
    });

}

// convert from bitmap to byte array
public static byte[] getBytes(Bitmap bitmap) {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
    return stream.toByteArray();
}

// convert from byte array to bitmap
public static Bitmap getImage(byte[] image) {
    return BitmapFactory.decodeByteArray(image, 0, image.length);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null !=data){
        Uri selectedImageUri = data.getData();
        fotoUsuario.setImageURI(selectedImageUri);
        Drawable drawable = fotoUsuario.getDrawable();
        Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
        byte[] image = getBytes(bitmap);
        Usuario usuario = getIntent().getParcelableExtra("usuario");
        Imagem imagem = new Imagem();
        imagem.setNome(usuario.getNome());
        imagem.setImagem(image);
        dao.insert(usuario.getNome(),image);


    }

这是我的 DAO 类

public ImagemDAO(Context context){
    conexao = new Conexao(context);
    db = conexao.getWritableDatabase();
}

public void insert( String name, byte[] image) throws SQLiteException {
    ContentValues values = new  ContentValues();
    values.put("nome",    name);
    values.put("imagem",   image);
    db.insert( "imagem_perfil", null, values );
}


public Imagem select(String nome) throws SQLiteException{

    Cursor cursor = db.query("imagem_perfil", new String[] {
                    "nome", "imagem"}, "nome" + "=?",
            new String[] { String.valueOf(nome) }, null, null, null, null);
    if (cursor != null){
        cursor.moveToFirst();
        byte[] image = cursor.getBlob(1);


        Imagem imagem = new Imagem(cursor.getString(0), image);

        return imagem;
    }


    return null;
}

public int update(Imagem imagem) {
    ContentValues values = new  ContentValues();
    values.put("nome", imagem.getNome());
    values.put("imagem", imagem.getImagem());

    // updating row
    return db.update("imagem_perfil", values, "nome" + " = ?",
            new String[] { String.valueOf(imagem.getNome()) });
}

public void delete(Imagem imagem) {
    db.delete("imagem_perfil", "id" + " = ?",
            new String[] { String.valueOf(imagem.getNome()) });
    db.close();
}

这就是我在 Database onCreate 上创建表的方式

db.execSQL("create table imagem_perfil(nome varchar (50), " + "imagem BLOB)");

【问题讨论】:

    标签: java sqlite android-studio


    【解决方案1】:

    试试这样的

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == IMAGE_UPLOAD_CODE) {
                Uri selectedImageUri = null;
                if (data != null) {
                    selectedImageUri = data.getData();
                }
                InputStream inputStream = null;
                try {
                    inputStream = getContentResolver().openInputStream(selectedImageUri);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                Bitmap mImage = BitmapFactory.decodeStream(inputStream);
                imagem.setImageBitmap(mImage);
                dao.insert(usuario.getNome(),image);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多