最近工作比较闲,除了用公司的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中,获取网络图片进行缓存是必须的,但是如果你的缓存策略不够好的话就会内存溢出,今天我总结一下我自己的看法,并做了demo。用到了线程池来控制线程,根据你手机的cpu的个数来确定你线程池中线程数的大小...
Android应用源码之listview获取网络图片缓存优化_网络
大家都知道,在android应用中UI线程5秒没响应的话就会抛出无响应异常,对于远程获取大的资源来说,这种异常还是很容易就会抛出来的,那么怎么避免这种问题的产生。在android中提供两种方法来做这件事情:
1)在图片下载缓存好之后获取 Glide.with(mContext).load(url).asBitmap().into(new SimpleTarget() { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> gl
Android listview获取网络图片缓存优化源码.zip
在移动应用中,我们一般将网络图片分为三个级别,第一级别是网络层,即根据图片的url地址可以找到服务器上相应图片,获取这一层的图片会消耗流量,所以我们希望可以获取后本地就永久使用,所以就会有接下来的缓存...
listview获取网络图片缓存优化
安卓Android源码——listview获取网络图片缓存优化.zip
Android状态保存、用户偏好设置保存、通过universal_image_loder网络加载图片并做图片缓存处理Demo 1、将universal-image-loder...jar包放入项目的libs文件里,并引入。 2、将MyApplication.java类放入项目,具体...
图片的三级缓存策略,即内存、硬盘和网络(其实网络不算是缓存,姑且算是吧~~),内存缓存使用的时LRUCache,这是一个存放键值对的列表,如果内存不够会根据最近使用次数的多少来删除其中的一个item,最少使用的就会...
安卓Android源码——listview获取网络图片缓存优化.rar
Android高级应用源码-listview获取网络图片缓存优化.zip
android 缓存 工具类 源码,为用户节省流量,把信息存放到数据库,三种缓存策略:(1)LRU算法,固定缓存图片数量(max_num),当图片数量超出max_num时,将缓存中最近用的最少的图片删除。 (2)FTU算法,固定每张...
获取Glide缓存空间大小 这个网上也有过一些介绍,但是给出的实现代码存在一些问题,我这里做了一定的修改.一下方法适合在Glide为默认的缓存目录的情况,不论是内部存储空间还是外部.因为我们可以通过Inte
Android中非常好图片缓存ImageCache,是国外的大牛写的,比较完整系统,但是本人认为也有几个缺点,比如获取磁盘缓存目录的方法,不过,总体非常还是很好的,基本满足各种场景,希望对你有所帮助!
通过网络获取图片,并缓存到本地,适合初学者,代码里面标有注释,listView = (ListView) findViewById(R.id.listview); listView.setAdapter(new CacheAdapter(this));
Android应用源码之listview获取网络图片缓存优化.zip
Android开发,获取当前手机安装的所有应用、根据包名获取应用信息、获取当前应用程序的包名、获取程序 图标、获取程序的版本号、获取程序的名字、获取程序的权限、获取程序的签名、获取当前包名的 SHA1、将获取到得...