Java 如何使用Glide通过字节数组加载图像?

Java 如何使用Glide通过字节数组加载图像?,java,android,android-glide,Java,Android,Android Glide,我有一个图像内容字节[]表单。但当我通过Glide加载它们时,就会显示出破碎的图像。我正在做的事情如下所示 Glide.with(context) .load(imageByteArray) .asBitmap() .placeholder(R.drawable.ic_broken) .into(rowImageView); imageByteArray在不使用glide的情况下成功转换为位图。因此,图像字节数组没有错 请告诉我我错过了什么 我还使用了Glide

我有一个图像内容字节[]表单。但当我通过Glide加载它们时,就会显示出破碎的图像。我正在做的事情如下所示

Glide.with(context)
    .load(imageByteArray)
    .asBitmap()
    .placeholder(R.drawable.ic_broken)
    .into(rowImageView);
imageByteArray在不使用glide的情况下成功转换为位图。因此,图像字节数组没有错

请告诉我我错过了什么

我还使用了Glide库com.github.bumptech.Glide:Glide:3.6.1 和Android支持库com.Android.support:support-v13:23.0.1

已编辑

好的,这就是我正在做的

String imageBytes = "HVao14fpmtHSev3OgsrQNsawkFzXNcY3BsfQla6..."
上面定义的这个字符串是我从web API接收的实际图像的字节

我将这个字符串转换成字节数组,如下所示

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;
}
             Glide.with(this)
                .asBitmap()
                .load(imageAsBytes)
                .into(image)
公共静态字节[]hexStringToByteArray(字符串s){
int len=s.length();
字节[]数据=新字节[len/2];
对于(int i=0;idata[i/2]=(byte)(Character.digit(s.charAt(i),16)假设您的base64字符串是

String imageBytes = "HVao14fpmtHSev3OgsrQNsawkFzXNcY3BsfQla6..."
您应该通过将
imageBytes
字符串转换为字节数组

byte[] imageByteArray = Base64.decode(imageBytes, Base64.DEFAULT);
然后将此
imageByteArray
传递给Glide

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

您可以使用以下命令将
Base64
字符串转换为图像

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

如果您在
.asBitmap()
上遇到错误,就这样使用它

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;
}
             Glide.with(this)
                .asBitmap()
                .load(imageAsBytes)
                .into(image)
科特林方式:

val imageByteArray = Base64.decode(sampleBase64ImageString, Base64.DEFAULT)
Glide.with(this).load(imageByteArray).into(imageView)

我做的有点不同

byte[] bytes = Glide.with(context)
                        .as(byte[].class)
                        .load(url)
                        .submit()
                        .get();

字节已准备好写入文件。

prolly,因为您不了解多线程的基础知识…但这只是瞎猜…因为您没有提供如何获取此字节数组…此变量的作用域是什么,它用于某种循环中…我明白。请用以下内容指导我,而不是给出这些类型的注释正确的回答。谢谢。请提出正确的问题…因为这段代码从我这里提供了一个未损坏的图像(我使用了您问题中的代码和问题中的库)问题是imageByteArray在不使用glide的情况下成功地转换为位图。有关详细信息,imageByteArray来自web API。它以字节数组形式发送图像。他说“我理解”…不,你不理解…=>这两个示例(使用和不使用glide)的多线程处理的“理解”应该有相同的结果:但正如你所看到的那样,他们没有…@安丹·阿姆贾德我也有同样的问题,我尝试了这个片段,但显示错误,无法解决。asBitmap(),你能帮我吗?@AmitVerma你使用的是哪个滑动版本?如果低于5,那么在.with()之后立即使用.asBitmap()如果我有一张图片列表,那么这会变得非常慢。你的答案和公认的答案有什么不同?没什么,他只是减少了一个变量-