在做android开发的时候,经常需要从网上下载一些图片,在界面上显示,一般的获取图片都会使用如下的代码:
//获取connection,方法略
conn = getURLConnection(url);
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工作。
分享到:
相关推荐
总结一下,Android下载图片到相册涉及的主要步骤包括:请求权限、发起网络请求下载图片、保存图片到公共外部存储目录、以及通知媒体库更新。在实现这些功能时,可以利用Volley、OkHttp等网络库,以及Android的文件...
Android 下载图片 简单 例子 Android Image DownLoader
2. **创建网络请求**: 使用Volley的`ImageLoader`类来下载图片。首先,创建一个自定义的`RequestQueue`实例,并初始化`ImageLoader`。在`Application`类或者某个初始化的地方: ```java public class MyApplication ...
- **异步下载**:Android中通常使用异步方式下载图片,避免阻塞主线程,影响用户界面。可以使用`AsyncTask`、`IntentService`或者第三方库如`Volley`、`OkHttp`来实现。 - **HTTP请求**:发送HTTP GET请求获取图片...
本教程将详细讲解如何在Android应用中实现批量下载图片并进行高效缓存,以实现非常流畅的用户体验。我们将主要关注LruCache技术,这是一种内存管理策略,有助于优化内存使用。 首先,我们需要理解Android中的图片...
本项目"Android图片选择,裁剪,预览,下载"正是为了解决这些问题而设计的,它提供了一站式的解决方案。 首先,我们要理解"图片选择"这个概念。在Android中,用户可能需要从相册中选取一张或多张图片,这个过程涉及...
本文将详细讲解如何在Android中实现图片的选取、上传至服务器以及从服务器下载图片,并将其存储到MySQL数据库的过程。 首先,我们需要处理图片的选取。Android提供了多种方式让用户选择图片,如使用系统的相册或...
"便捷下载 for Android" 是一款专为Android用户设计的应用程序,旨在简化图片、音频和视频内容的下载过程。它提供了一键式批量下载功能,让用户能够高效地从多个平台获取媒体资源,尤其适合那些希望节省时间和精力的...
至此,你已经学会了如何在Android应用中下载图片并保存到SDcard的特定位置。这个过程包括了网络请求、数据流处理、文件操作和权限管理等关键环节。请确保在实际项目中根据具体需求进行调整,如错误处理、进度显示、...
本示例将围绕"android多线程下载图片例子"这一主题,深入探讨Android中异步加载图片的机制,并结合"AndroidUploadImages"这一文件名,推测这是关于图片上传或下载的实践案例。 1. **AsyncTask** Android提供了一个...
本实例,"android下载图片、音频实例",提供了一个可运行的解决方案,帮助开发者实现这一功能。下面我们将深入探讨实现这一功能所涉及的关键知识点。 1. **Android权限管理**: 在Android中,自6.0(API级别23)...
在Android开发中,从网络下载图片是一项常见的任务,特别是在构建应用程序时,比如社交应用、电商应用等。本文将深入探讨三种不同的方法来实现这一功能:Handler、AsyncTask以及线程池。 1. Handler机制下载图片: ...
在Android开发中,异步批量下载图片并缓存是一个常见的需求,特别是在开发涉及大量图片展示的应用时,如社交应用、电商应用等。本教程将基于提供的Android例子源码,深入探讨如何实现这一功能。 首先,我们需要理解...
在Android开发中,处理网络下载大量图片是一项常见的任务,尤其在构建内容丰富的应用程序时,如社交媒体应用或电商平台。本文将详细解析如何实现异步加载大量图片,并探讨关键知识点,包括缓存策略、硬盘缓存、容错...
5. **OkHttp与 Fresco**:除了上述方法,还可以结合使用OkHttp这样的网络库来下载图片,配合Fresco这样的深度缓存库来管理图片资源。OkHttp提供了高效的网络请求,Fresco则具有强大的内存和磁盘缓存机制,能有效防止...
在Android应用开发中,图片的下载与显示是一个常见的需求,特别是在构建类似相册的应用时。本文将深入探讨如何在Android中实现高效的图片下载和显示功能,以实现相册效果。 一、图片下载 1. 使用URL加载图片:通过...
2. Android下载文件过程: - 建立网络连接:使用HttpURLConnection或第三方库如OkHttp建立到服务器的连接,设置请求方法(通常是GET或POST)及必要的请求头(如Content-Type,Authorization等)。 - 获取输入流:...
1. **异步下载**:为了避免阻塞主线程,通常我们会使用异步方式下载图片。Android提供了`AsyncTask`、`Handler`、`Thread`等机制实现后台下载。但现在更推荐使用如`Volley`、`OkHttp`等现代网络库,它们自带异步请求...
在Android开发中,图片下载和显示是常见的操作,但如果不恰当处理,很容易引发内存溢出(Out of Memory,简称OOM)问题。内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,导致程序崩溃。对于Android应用...
在Android开发中,高效地处理网络图片下载是十分常见的需求,尤其在大数据量或高并发的情况下,多线程网络图片下载能显著提升用户体验。本文将详细介绍如何构建一个Android多线程网络图片下载工具类,包括其核心原理...