WEB开发网
开发学院手机开发Android 开发 android 网络图片下载的实现方式及注意事项 阅读

android 网络图片下载的实现方式及注意事项

 2010-08-20 02:03:00 来源:WEB开发网   
核心提示:is = conn.getInputStream();//获取Bitmap的引用Bitmap bitmap = BitmapFactory.decodeStream(is)但是网络不好的时候获取不了图片,推荐使用以下的方法://获取长度int length = (int) conn.getContentLength()

is = conn.getInputStream();

//获取Bitmap的引用

Bitmap bitmap = BitmapFactory.decodeStream(is)

但是网络不好的时候获取不了图片,推荐使用以下的方法:

//获取长度

int length = (int) conn.getContentLength();

if (length != -1) {

byte[] imgData = new byte[length];

byte[] temp=new byte[512];

int readLen=0;

int destPos=0;

while((readLen=is.read(temp))>0){

System.arraycopy(temp, 0, imgData, destPos, readLen);

destPos+=readLen;

}

bitmap=BitmapFactory.decodeByteArray(imgData, 0, imgData.length);

}

使用上面的方法的好处是在网速不好的情况下也会将图片数据全部下载,然后在进行解码,生成图片对象的引用,所以可以保证只要图片存在都可以下载下来。当然在读取图片数据的时候也可用java.nio.ByteBuffer,这样在读取数据前就不用知道图片数据的长度也就是图片的大小了,避免了有时候 http获取的length不准确,并且不用做数组的copy工作。

全部代码如下:

public synchronized Bitmap getBitMap(Context c, String url) {

URL myFileUrl = null;

Bitmap bitmap = null;

try {

myFileUrl = new URL(url);

} catch (MalformedURLException e) {

bitmap = BitmapFactory.decodeResource(c.getResources(),

com.jixuzou.moko.R.drawable.defaultimg);

return bitmap;

}

try {

HttpURLConnection conn = (HttpURLConnection) myFileUrl

.openConnection();

conn.setDoInput(true);

conn.connect();

InputStream is = conn.getInputStream();

int length = (int) conn.getContentLength();

if (length != -1) {

byte[] imgData = new byte[length];

byte[] temp = new byte[512];

int readLen = 0;

int destPos = 0;

while ((readLen = is.read(temp)) > 0) {

System.arraycopy(temp, 0, imgData, destPos, readLen);

destPos += readLen;

}

bitmap = BitmapFactory.decodeByteArray(imgData, 0,

imgData.length);

}

} catch (IOException e) {

bitmap = BitmapFactory.decodeResource(c.getResources(),

com.jixuzou.moko.R.drawable.defaultimg);

return bitmap;

}

return bitmap;

}

上一页  1 2 

Tags:android 网络 图片下载

编辑录入:coldstar [复制链接] [打 印]
赞助商链接