【发布时间】: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