最近工作比较闲,除了用公司的imac机学学iphone外,有必要对以前的项目里面的难点进行一下总结了,对于Android开发中的难点,一是网络获取内容的处理,二是UI设计方面。对于我来说,特别麻烦就是UI设计方面的东西,公司的开发以iphone为主,毕竟香港人的iphone普及比较高(销售价格好像是全球最低的),为了模仿iphone的Tabbar,用TabActivity+ActivityGroup的处理方式不知道出了多少问题了,还好都一一解决了。
获取网络图片的方法(如果手机缓存里面有就从缓存获取),我以前写的,比较原始:
ImageView mImageView = (ImageView)this.findViewById(R.id.imageview);
String imagePath = getImagePath(context, photoURL); // context:上下文 ,photoURL:图片的url路径
mImageView.setImageBitmap(BitmapFactory.decodeFile(imagePath));
getImagePath()方法:
// 获取网络图片,如果缓存里面有就从缓存里面获取
public static String getImagePath(Context context, String url) {
if(url == null )
return "";
String imagePath = "";
String fileName = "";
// 获取url中图片的文件名与后缀
if(url!=null&&url.length()!=0){
fileName = url.substring(url.lastIndexOf("/")+1);
}
// 图片在手机本地的存放路径,注意:fileName为空的情况
imagePath = context.getCacheDir() + "/" + fileName;
Log.i(TAG,"imagePath = " + imagePath);
File file = new File(context.getCacheDir(),fileName);// 保存文件,
if(!file.exists())
{
Log.i(TAG, "file 不存在 ");
try {
byte[] data = readInputStream(getRequest(url));
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);
bitmap.compress(CompressFormat.JPEG, 100, new FileOutputStream(
file));
imagePath = file.getAbsolutePath();
Log.i(TAG,"imagePath : file.getAbsolutePath() = " + imagePath);
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
return imagePath;
} // getImagePath( )结束。
getRequest( ) 方法:网络获取图片为输入了
public static InputStream getRequest(String path) throws Exception{
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000); // 5秒
if(conn.getResponseCode() == 200){
return conn.getInputStream();
}
return null;
}
readInputStream( ) 方法:把输入流转化成二进制
public static byte[] readInputStream(InputStream inStream) throws Exception{
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int len = 0;
while( (len = inStream.read(buffer)) != -1 ){
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
return outSteam.toByteArray();
}
分享到:
相关推荐
在Android应用开发中,远程图片的获取和本地缓存是一个重要的优化策略,旨在提升用户体验,避免因长时间等待网络加载而导致的无响应异常。通常,Android系统会在UI线程执行耗时操作超过5秒时抛出ANR(Application ...
正是因为有了这样的缓存机制,当用户在有网络连接时加载过图片,即使在离线状态下,Volley依然可以从内存或磁盘缓存中读取到这些图片,保证用户体验的连续性。 6. **优化与注意事项**: - 需要注意的是,内存缓存...
在Android开发中,获取网络图片并将其显示在应用中是一项常见的任务。这通常涉及到网络请求、图片缓存、UI更新等多个环节。以下是一篇博客文章的主要内容,它讲解了如何在Android应用中实现这一功能,并去掉标题显示...
在Android应用中,我们通常会从网络下载图片数据,然后将其解码为Bitmap对象,最后将Bitmap设置到ImageView组件中进行显示。 1. **基础方法:使用HttpURLConnection和BitmapFactory** 要获取网络图片,你可以使用`...
当一个图片请求被发送到服务器,服务器会根据响应头中的信息(如`Cache-Control`,`ETag`或`Last-Modified`)来决定是否可以从缓存中获取数据,而不是重新请求。这样可以减少网络延迟,提高响应速度。在Android中,...
总之,Android获取网络图片的关键在于正确使用线程模型来分离UI更新和网络请求,同时结合合适的图片加载库来优化性能。通过Thread和Handler的组合,我们可以实现在不阻塞主线程的情况下,安全、有效地加载网络图片。
在android中,获取网络图片进行缓存是必须的,但是如果你的缓存策略不够好的话就会内存溢出,今天我总结一下我自己的看法,并做了demo。用到了线程池来控制线程,根据你手机的cpu的个数来确定你线程池中线程数的大小...
本篇将详细讲解如何在Android应用中实现从网络URL获取并显示图片的功能。 首先,我们需要一个网络库来处理HTTP请求。常见的有Volley、OkHttp和Retrofit等。这里以OkHttp为例,它是一个高效的网络库,支持异步请求和...
在Android开发中,将网络上的图片加载到ImageView控件中是一项常见的需求。本文将详细介绍如何通过URL获取网络图片并将其显示在ImageView上。我们将使用一个简单的示例来演示这一过程,该示例是从百度官网获取其logo...
在Android开发中,图片缓存是一项非常重要的技术,特别是在处理大量网络图片的应用中。网络图片缓存能够提高用户体验,减少网络请求,节省流量,并减轻服务器压力。本文将深入探讨如何在Android应用中实现图片的网络...
综上所述,Android获取网络图片涉及网络编程、图像处理和UI交互等多个方面,需要理解网络请求、字节流处理以及UI线程规则等核心知识点。同时,为了优化性能和用户体验,还需要关注内存管理和缓存策略。
在Android开发中,从网络获取图片资源并进行显示、缩放和触摸操作是常见的需求。以下将详细讲解这个过程中的关键技术点。 首先,从网络异步加载图片资源是为了避免阻塞主线程,确保用户界面(UI)的流畅性。Android...
在Android开发中,ListView是展示大量数据常用的组件,但当数据包含网络图片时,如果不进行优化,可能会导致性能问题,如界面卡顿、内存溢出等。本篇将深入探讨如何通过源码分析和实践,对ListView加载网络图片进行...
在Android开发中,获取手机上的...以上是实现"Android获取手机所有图片并显示"的基本步骤和关键技术点。在实际开发中,还需要考虑到用户体验、性能优化以及兼容性问题,确保应用能在不同版本的Android系统上流畅运行。
在Android 13和14系统中,获取第三方应用的缓存数据对于开发者来说是一项具有挑战性的任务。这是因为Android系统为了保护用户隐私和安全,对应用程序间的数据访问进行了严格的限制。然而,对于某些应用场景,如分析...
在Android开发中,获取网络图片是一项常见的任务,尤其在构建用户界面时,如显示新闻、商品详情或个人头像等。本案例主要讲解如何在Android应用中通过HTTP GET请求下载并显示网络上的图片。我们将围绕以下几个核心...
**Android图片缓存框架Fresco极其强大的配置** Fresco是一款由Facebook开发的强大的Android图片加载库,它在处理图片方面有着出色的表现,特别是在大图、动态图和内存管理上。Fresco通过其独特的架构,避免了OOM...
当内存和文件缓存都没有找到图片时,最后一步是从网络中获取。虽然网络请求本身并不算是缓存,但在设计缓存策略时,我们通常将网络视为最底层的资源提供者。在Android中,可以使用HttpURLConnection或OkHttp等库...