2013-05-16 2 views
1

J'ai regardé pendant des siècles pour essayer d'obtenir ce qui se passait et je ne peux pas obtenir l'image bitmap à afficher. J'ai un service web que j'appelle avec un identifiant et il renvoie une image blob que je stocke dans une chaîne (img)Conversion d'une image BLOB en image bitmap et affichage dans ImageView

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpget = new HttpGet("http:site.com?GETBLOB&__blobRef=1&USER_ID=6379"); 
HttpResponse response = httpclient.execute(httpget); 
BufferedReader in = new BufferedReader(new 
        InputStreamReader(response.getEntity().getContent())); 
        StringBuffer sb = new StringBuffer(""); 
        String line = ""; 
        String NL = System.getProperty("line.separator"); 

        while ((line = in.readLine()) != null) 
        { 
         sb.append(line + NL); 
        } 

        in.close(); 
        img = sb.toString(); 

la img chaîne contient ce qui semble être un résultat valide quand je la sortie à un textview donc im assez sûr que le code ci-dessus fonctionne bien. Le problème est de transformer cette chaîne en bitmap. J'ai essayé beaucoup de manières mais de ce que j'ai pu trouver cela semble être la meilleure manière acceptée de le faire.

byte[] decodedString = Base64.decode(img, Base64.DEFAULT); 
bm = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
ImageView imgbox = (ImageView)findViewById(R.id.imagebox); 
imgbox.setImageBitmap(bm); 

Cela ne fonctionne pas pour moi. Pour la plupart des méthodes que j'ai essayé il n'affiche rien, mais pour cette méthode particulière, il provoque le crash de l'application (même si j'ai un try/catch.)

+0

Vérifiez votre entrée base64. Il peut utiliser un drapeau différent (NO_WRAP, éventuellement) – njzk2

+0

comment puis-je vérifier cela? –

+0

vérifiez votre chaîne base64, pour voir si elle est divisée en lignes de 80 caractères. Veuillez également définir "ne fonctionne pas", et post stacktrace. – njzk2

Répondre

1

Il semble que je l'ai trop compliqué beaucoup trop. cela fonctionne parfaitement et très simplement

URL imgurl = new URL("http:mysite?GETBLOB&__blobRef=1&USER_ID="+ID); 
InputStream picin = imgurl.openStream(); 
Bitmap avatar = BitmapFactory.decodeStream(picin); 
imgbox.setImageBitmap(avatar); 
0

Si img est un type Blob . Vous pouvez obtenir des octets [] à partir de cela.

byte[] imgByte = img.getBlob(); 
Bitmap bmp = BitmapFactory.decodeByteArray(imgByte,0,imgByte.length); 
imgbox.setImageBitmap(bmp);