2016-01-04 4 views
10

Ich habe ein Bild Inhalt Byte [] Form. Aber wenn ich sie durch Glide lade, werden kaputte Bilder gezeigt. Was ich mache ist unten gezeigt.Wie lade ich ein Bild über Byte-Array mit Glide?

Glide.with(context) 
    .load(imageByteArray) 
    .asBitmap() 
    .placeholder(R.drawable.ic_broken) 
    .into(rowImageView); 

imageByteArray wird erfolgreich in Bitmap konvertiert, ohne glide zu verwenden. Es gibt also keinen Fehler bei Image Byte Array.

Bitte führen Sie mich, was ich vermisse?

Auch verwende ich Glide Bibliothek com.github.bumptech.glide: glide: 3.6.1 und Android Support-Bibliothek com.android.support:support-v13:23.0.1

Herausgegeben

Ok, das mache ich.

Diese Zeichenfolge oben definiert ist Bytes des tatsächlichen Bildes, die ich von Web-API empfange.

Ich Umwandlung dieser String in Byte-Array wie folgt

public static byte[] hexStringToByteArray(String s) { 
     int len = s.length(); 
     byte[] data = new byte[len/2]; 
     for (int i = 0; i < len; i += 2) { 
      data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) 
        + Character.digit(s.charAt(i+1), 16)); 
     } 
     return data; 
} 

als ich resultierende Byte-Array "imageByteArray" Anwenden Code oben definiert gleiten.

+0

prolly konvertieren, weil Sie ... nicht Grundlagen der Multithreading verstehen, aber es ist nur blinde guess ... wie Sie nicht bieten wie erhalten Sie dieses Byte-Array ... Was ist ein Gültigkeitsbereich dieser Variable ist es in einer Art von Schleifen verwendet .... – Selvin

+0

Ich verstehe. Anstatt diese Art von Kommentaren zu geben, führe mich bitte mit der richtigen Antwort. Danke dann –

+0

dann stellen Sie bitte die richtige Frage ... da dieser Code ein NICHT gebrochenes Bildformular mir zur Verfügung stellt (ich verwendete Code von Ihrer Frage und Bibliotheken von der Frage) – Selvin

Antwort

20

Lets sagen, dass Ihre base64 String

String imageBytes = "HVao14fpmtHSev3OgsrQNsawkFzXNcY3BsfQla6..." 

Sie sollten imageBytes String Array von Bytes durch

byte[] imageByteArray = Base64.decode(imageBytes, Base64.DEFAULT); 

danach passieren diese imageByteArray konvertieren zu gleiten.

Glide.with(context) 
    .load(imageByteArray) 
    .asBitmap() 
    .placeholder(R.drawable.ic_broken) 
    .into(rowImageView); 
+0

@Andan Amjad Ich habe das gleiche Problem, ich habe dieses Snippet versucht, aber zeigt Fehler, kann nicht lösen .asBitmap(), können Sie mir helfen? – Gibs

2

Sie können Base64 String Bild mit den folgenden

Glide.with(context) 
    .load(Base64.decode(base64ImageString, Base64.DEFAULT)) 
    .asBitmap() 
    .placeholder(R.drawable.ic_broken) 
    .into(rowImageView); 
+1

Was ist anders in deiner Antwort als im Vergleich zu einer angenommenen ?! – Tima

+0

Nichts, er macht nur einen weniger variabel- –