Boa anoite!
Estou com problema para gravar e exibir uma imagem recuperada do Sql Server. Só consigo gravar a imagem recuperada em \mnt\sdcard, pelo DDMS consigo transferir a imagem para o meu desktop sem problemas. Minha duvida é como posso gravar a imagem no contexto da aplicação e como exibir essa imagem recuperando do contexto tudo dinamicamente, meu layout está sendo criado na Activity. Segue o código para gravar:
try {
byte[] decodedBytes = Base64.decodeBase64(rs.getString("FOTO").getBytes());
FileOutputStream fos = new FileOutputStream("/mnt/sdcard/imagem.jpg");
fos.write(decodedBytes);
FileDescriptor fd = fos.getFD();
fos.close();
} catch (Exception e) {
throw new Exception( "Erro ao converter os bytes recebidos para imagem");
}
Funciona sem problemas, consigo visualizar a foto copiando do DDMS. Mais preciso salvar no contexto da aplicação para poder exibir em outro metodo.
try {
AssetManager manager = getAssets();
InputStream open = null;
open = manager.open("/mnt/sdcard/imagem.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(open);
imgView.setImageBitmap(bitmap);
}catch (Exception e3) {
Log.e("Teste", e3.getMessage());
}
Não exibe a imagem, sendo que preciso recuperar do contexto da aplicação.
Manifest
<uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
<uses-permission android:name="android.permission.READ_OWNER_DATA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Desde já agradeço pela ajuda.
Já tentei salvar sem informar o caminho /mnt/sdcard
try {
byte[] decodedBytes = Base64.decodeBase64(rs.getString("FOTO").getBytes());
FileOutputStream fos = new FileOutputStream("/imagem.jpg");
fos.write(decodedBytes);
FileDescriptor fd = fos.getFD();
fos.close();
} catch (Exception e) {
throw new Exception( "Erro ao converter os bytes recebidos para imagem");
}
Erro: java.io.FileNotFoundException: /imagem.jpg (Read-only file system)
Tem o manifest configurado com os uses:
<uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
<uses-permission android:name="android.permission.READ_OWNER_DATA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Bom dia!
Já estou conseguindo salvar a imagem na aplicação, agora falta exibir na imageview, segue o código:
ImageView imgView = new ImageView(this);
try {
byte[] decodedBytes = Base64.decodeBase64(produto.getFoto().getBytes());
FileOutputStream fos = openFileOutput("imagem.jpg", Context.MODE_PRIVATE);
fos.write(decodedBytes);
FileDescriptor fd = fos.getFD();
fos.close();
File imgFile = new File("imagem.jpg");
if(imgFile.exists())
{
imgView.setImageURI(Uri.fromFile(imgFile));
}
} catch (Exception e) {
Log.e("Teste", "Erro: " + e.getMessage());
}
layout.addView(imgView);
Pelo DDMS verifiquei que a imagem está sendo gravada em /data/data/com.br.teste.imagem/files, mais não consigo carregar essa imagem, não entra no if(imgFile.exists())
não é “.jpeg” ao invés de “.jpg”?
e tem outra coisa… vc fez isso?
imgView = (ImageView)findViewById(R.id.imageView1);
dá uma olhada aí e me fala.
[quote=saryoromulo]não é “.jpeg” ao invés de “.jpg”?
e tem outra coisa… vc fez isso?
imgView = (ImageView)findViewById(R.id.imageView1);
dá uma olhada aí e me fala.[/quote]
Amigo, obrigado pelas suas dicas. A extensão pode ser “.jpg”, eu consegui solucionar o problema. E com relação ao imgViem, estou criando dinamicamente, por isso não tem o find pela classe R. Vou postar a solução, obrigado pelas sugestões.
Espero que possa ajudar alguém postando a solução, ai vai:
try {
ImageView imgView = new ImageView(this);
byte[] decodedBytes = Base64.decodeBase64(produto.getFoto().getBytes());//Campo do tipo String recuperado do banco
BitmapFactory factory = new BitmapFactory();
Bitmap bitmap = factory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
imgView.setImageBitmap(bitmap);
} catch (Exception e) {
Log.e("Teste", "Erro: " + e.getMessage());
}