Java 无法使用jsoup获取图像的url

Java 无法使用jsoup获取图像的url,java,android,jsoup,malformedurlexception,Java,Android,Jsoup,Malformedurlexception,我正在尝试获取一系列图像的url,如下所示: for(Element img : document.select(".left-column .strillo-content .lazy img[src]")) { InputStream input = new java.net.URL(imageMainUrl).openStream(); Bitmap bitmap = BitmapFactory.decodeStream(input); images.add(bit

我正在尝试获取一系列图像的url,如下所示:

for(Element img : document.select(".left-column .strillo-content .lazy img[src]")) {
    InputStream input = new java.net.URL(imageMainUrl).openStream();
    Bitmap bitmap = BitmapFactory.decodeStream(input);
    images.add(bitmap);
}
但每次我尝试运行我的应用程序时,都会收到以下警告:

java.net.MalformedURLException: Unknown protocol: data
at java.net.URL.<init>(URL.java:184)
at java.net.URL.<init>(URL.java:127)
我可以找出原因,因为我100%确信我选择的元素是正确的,而且我对网站的其他部分也做了同样的处理,而且效果很好

更新1: 我尝试了这种方法来解码“base64”图像:

byte[] decodedString = Base64.decode(imageMainUrl, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

但是结果是一样的。

这是数据URI方案

它允许在URI中添加内联数据

提取URI的base64部分,并使用parseBase64Binary获取字节数组,详细信息如下: 使用此数组可生成ByteArrayInputStream 使用BitmapFactory将其解码为位图 编辑

这段代码有效,它给出了1px*1px的gif图像。我使用了commons编解码器中的org.apache.commons.codec.binary.Base64


我不是HTML方面的专家,但看起来图像的内容实际上嵌入了src标记中,而不是指向URL。如果您将其存储在字节数组中并将其传递给BitmapFactory.decodeByteArray,您可能能够在android上对其进行解码。您必须从imageMainUrl中删除前缀数据:image/gif;base64,你所说的相同结果是什么意思?对不起,我的错,畸形的异常现在已经消失了!返回的位图为空
byte[] decodedString = Base64.decode(imageMainUrl, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
String uri = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
byte[] decodedString = Base64.decodeBase64(uri.substring(uri.indexOf("data:image/gif;base64,") + "data:image/gif;base64,".length()));
ByteArrayInputStream is = new ByteArrayInputStream(decodedString);
FileOutputStream os = new FileOutputStream(new File("/tmp/test.gif"));

byte[] buffer = new byte[1024];
int length;

// copy the file content in bytes 
while ((length = is.read(buffer)) > 0)
{
    os.write(buffer, 0, length);
}

is.close();
os.close();