我正在开发一个为某些客户提供图库的应用。我从每个客户的图像中得到了一些网址。问题是我没有尝试下载图像时出错,但有些图像无法在某些设备上下载/显示。例如,我有一个适用于S3的网址,但不适用于iconia标签和motorola razr。
下面是我的代码:
InputStream is = (InputStream) fetch(url);
Bitmap bitmap = BitmapFactory.decodeStream(new FlushedInputStream(is));
Drawable img = new BitmapDrawable(bitmap);
获取方法:
public Object fetch(String address) throws MalformedURLException, IOException {
URL url = new URL(address);
Object content = url.getContent();
return content;
}
FlushInputStream方法:
static class FlushedInputStream extends FilterInputStream {
public FlushedInputStream(InputStream inputStream) {
super(inputStream);
}
@Override
public long skip(long n) throws IOException {
long totalBytesSkipped = 0L;
while (totalBytesSkipped < n) {
long bytesSkipped = in.skip(n - totalBytesSkipped);
if (bytesSkipped == 0L) {
int b = read();
if (b < 0) {
break; // we reached EOF
} else {
bytesSkipped = 1; // we read one byte
}
}
totalBytesSkipped += bytesSkipped;
}
return totalBytesSkipped;
}
}
InputStream
在两个设备中是相同的,但在其中一些设备上(如iconia,razr),位图变为空,而在其中一些(如S3)上,这是正常的。
我从谷歌小组获得此代码,作为不下载所有图像的错误的解决方法。顺便说一下,skip
方法永远不会调用FlushedInputStream
。
有没有办法让它适用于所有设备?或任何其他代码的建议下载图像并将其显示到图库中?