- 浏览: 348599 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (139)
- Java (49)
- C# (23)
- 软件实施 (1)
- Mysql (8)
- Struts2&1.x (15)
- DWR (0)
- Javascript (7)
- Effective Java (8)
- Oracle (0)
- SqlServer (1)
- Spring (6)
- 数据结构 (2)
- 设计模式 (0)
- Hibernate (6)
- c++ (2)
- Qt (1)
- 瞎侃几句 (5)
- Openbravo2.5实施记录 (3)
- 工作总结 (6)
- 软件测试 (3)
- css (1)
- Android (13)
- Object-c (0)
- Html5 (1)
- jshoper开源项目 (34)
- Windows Phone (1)
- activiti (2)
最新评论
-
yzlseu:
没有思考,就是抄的,垃圾文章
Activiti5用户手册---Message Event Definitions -
yy756127197:
<timeDuration>P10D</ti ...
Activiti5用户手册---Events---Timer Event Definitions -
云端帕帕:
Activiti5用户手册---Events---Timer Event Definitions -
raychiong:
lz现在哪里高就呢?
记录一次高德软件面试经历 -
sdywcd:
water_quite 写道sdywcd 写道water_qu ...
jshoper3x在线商城系统更新说明及未来开发计划
情况:在做ostocy-jshop开源系统的时候,需要做一个关于android如何进行服务器图片本地缓存的功能。我使用了如下几个东西。
1,android 本地数据库SQLite
2,android下载网络图片
3,正则截取
4,Bitmap保存到本地
那就一个一个来说说吧
1,android 本地数据库SQLite:我要建立一个本地数据库,用来存放服务器返回的数据,缓存起来,下次就读取这个SQLite数据库了。
看代码先,然后解释
public class DBHelper extends SQLiteOpenHelper { //数据库名称 public static final String DB_NAME="jshopmactive.db"; //商品表名称 public static final String GOODS_TM_NAME="goods_tm"; //创建商品sql private static final String CREATE_GOODS_TM="create table " +"goods_tm(_id integer primary key autoincrement,goodsCategoryTid text,goodsid text,goodsname text,memberprice text,pictureurl text)"; private SQLiteDatabase db; public DBHelper(Context context) { super(context, DB_NAME, null, 3); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { this.db=db; db.execSQL(CREATE_GOODS_TM); } public void createDB(){ db=this.getWritableDatabase(); db.execSQL(CREATE_GOODS_TM); } /** * 插入数据 * @param values * @param tablename */ public void insert(String tablename,ContentValues values){ SQLiteDatabase db=this.getWritableDatabase(); db.insert(tablename, null, values); db.close(); } /** * 查询数据 * @param tablename * @return */ public Cursor query(String tablename){ SQLiteDatabase db=this.getWritableDatabase(); Cursor c=db.query(tablename, null, null, null, null, null, null); return c; } /** * 查询数据 * @param tablename * @return */ public Cursor queryByParam(String tablename,String param){ SQLiteDatabase db=this.getWritableDatabase(); Cursor c=db.rawQuery("select * from "+tablename+" where goodsCategoryTid=?", new String[]{String.valueOf(param)}); return c; } /** * 删除数据 * @param talbename * @param id */ public void delete(String talbename,String id){ if(db==null){ db=this.getWritableDatabase(); db.delete(talbename, "_id=?", new String[]{String.valueOf(id)}); } } /** * 删除所有数据 * @param tablename */ public void deleteAll(String tablename){ if(db==null){ db=this.getWritableDatabase(); db.delete(tablename, null, null); } } /** * 删除数据库表 * @param tablename */ public void DropTable(String tablename){ db=this.getWritableDatabase(); db.execSQL("drop table "+tablename); } /** * 删除数据库 * @param tablename */ public void DropDB(){ db=this.getWritableDatabase(); // db.execSQL("drop database jshopmactive"); onUpgrade(db,3,4); } /** * 关闭数据库连接 */ public void close(){ if(db!=null){ db.close(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS "+TABLE_TM_NAME); db.execSQL("DROP TABLE IF EXISTS "+GOODS_CATEGORY_TM_NAME); db.execSQL("DROP TABLE IF EXISTS "+GOODS_TM_NAME); onCreate(db); } }这里主要就是在建立数据表,抽取了一部分代码。
2,android下载网络图片:我通过android访问基于http的服务器方法,获取一个有图片的信息。
看代码
public ArrayList<HashMap<String, Object>> getGoodsList(String goodsCategoryTid) throws IOException { requestjsonstr = this.queryGoodsListForJshop(goodsCategoryTid); if (Validate.StrNotNull(requestjsonstr)) { JSONArray ja = (JSONArray) JSONValue.parse(requestjsonstr); for (int i = 0; i < ja.size(); i++) { HashMap<String, Object> map = new HashMap<String, Object>(); JSONObject jo = (JSONObject) (ja.get(i)); map.put("pictureurl",getPictureurlImg(JshopActivityUtil.BASE_URL+ jo.get("pictureurl").toString())); map.put("goodsname", jo.get("goodsname").toString()); map.put("memberprice", "¥" + jo.get("memberprice").toString()); map.put("goodsid", jo.get("goodsid").toString()); map.put("goodsCategoryTid", goodsCategoryTid); map.put("pictureurlpath", downloadpcurl); goodslists.add(map); } } return goodslists; } private Bitmap getPictureurlImg(String pictureurl) throws IOException { URL url = new URL(pictureurl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5 * 1000); InputStream in = conn.getInputStream(); Bitmap bm = BitmapFactory.decodeStream(in); // 保存本地图片 String fileName=savePicturetoDeviceAndReturnFixedUrl(pictureurl); saveOnlinePictureToCard(bm,fileName); in.close(); return bm; }
3,正则截取
/** * 获取网络图片名称 * * @param pictureurl * @return */ private String savePicturetoDeviceAndReturnFixedUrl(String pictureurl) { String regstr = "(http:|https:)\\/\\/[\\S\\.:/]*\\/(\\S*)\\.(jpg|png|gif)"; String postfix = "", filename = "", resultstr = ""; Pattern patternForImg = Pattern.compile(regstr,Pattern.CASE_INSENSITIVE); Matcher matcher = patternForImg.matcher(pictureurl); if (matcher.find()) { filename = matcher.group(2); postfix = matcher.group(3); } return resultstr = filename + "." + postfix; }
4,Bitmap保存到本地
private void saveOnlinePictureToCard(Bitmap bm, String fileName) throws IOException { File dirFile = new File(JshopMParams.SAVEPCPATH); if (!dirFile.exists()) { dirFile.mkdir(); } String onlineFilePath = JshopMParams.SAVEPCPATH +fileName; File myOnlineFile = new File(onlineFilePath); BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(myOnlineFile)); bm.compress(Bitmap.CompressFormat.JPEG, 100, bos); bos.flush(); bos.close(); this.downloadpcurl = onlineFilePath; }
详情请见https://github.com/sdywcd/ostocy-jshop 开源项目
发表评论
-
android按需加载你的界面
2014-05-08 09:18 1274按需加载你的界面 有时候你的布局中可能存在一些不常 ... -
如何判断android activity是否运行
2014-05-05 17:19 7988如何判断android activity是否运行 ... -
看了一些git教程后自己的总结
2014-04-24 12:45 1350平时在维护开源程序 ... -
android在布局中动态增加view时的层级控制
2014-03-24 14:40 34013问题:我们有时候希望动态的在android的布局中增加vi ... -
android 在配置文件中指定上级activity
2013-12-07 23:47 1455今天在看sdk doc时发现可以在配置文件中定义一个acti ... -
android button 点击事件
2013-12-06 11:49 1161<Button android:layou ... -
Activiti5用户手册---Message Event Definitions
2013-09-04 14:05 6568Message Event Definitions(消息事件 ... -
mysql 计算工作日
2013-08-16 16:25 2261DELIMITER $$ drop procedure ... -
mysql 跨年按周分组
2013-08-16 15:36 2538use employees; create table s ... -
Activiti5用户手册---Events---Timer Event Definitions
2013-07-30 11:45 10455好久以前翻译的了, ... -
我的android记录
2013-06-11 23:54 01,listview获取选择的items选中状态(例如lis ... -
android 中checkbox radiobutton文字间间距处理
2013-06-09 13:05 4888情况:ui设计要求必须让checkbox或者radiobut ... -
如何在eclipse adt中查看手机中应用的ui布局
2013-06-04 20:56 5876情况:忽然想查下怎么看那些漂亮的android ui布局 ... -
在eclipse 4.2中配置tomcat插件并修改jvm启动参数
2013-06-04 12:31 4752情况:今天在运行项目的时候发现需要一个比较大的内存才能够完成 ... -
css和html中的dom节点都是怎么被处理的
2013-05-26 19:11 1190今天看到一篇文章浏览器渲染原理 很不错 为什么我会去注意 ... -
搜寻了关于android推送资料后的一些思考
2013-04-11 22:23 1677其实我们要用推送服务的情况还挺多: 1,站内性 其实是可以 ... -
java中集合的父类collection的那些事
2013-04-10 18:02 01,collection是所有集合的父类 2,Li ... -
有那些设计模式,观察者模式是什么
2013-04-09 15:41 0设计模式还挺多的。可以分成如下几类 创建模式: ... -
写一个线程安全的单例模式
2013-04-08 23:30 1715谢谢 http://blog.sina.com.cn/s/b ... -
ThreadLocale是什么
2013-04-07 21:53 1107维持线程封闭性的一种更规范的方法是用ThreadLocal, ...
相关推荐
在Android应用开发中,远程图片的获取和本地缓存是一个重要的优化策略,旨在提升用户体验,避免因长时间等待网络加载而导致的无响应异常。通常,Android系统会在UI线程执行耗时操作超过5秒时抛出ANR(Application ...
3. **图片缓存**: 使用类似`Picasso`或` Glide`的库,它们都支持本地缓存图片,避免重复加载和降低内存消耗。 4. **JSON数据对象缓存**: 将从服务器获取的JSON数据解析成对象并缓存,下次需要时直接从本地读取,减少...
- **失效时间**:设置缓存图片的过期时间,超过这个时间则从服务器重新下载。 - **强制缓存**:在网络不稳定或无网络时,优先从本地缓存读取图片。 - **条件请求**:使用If-None-Match或If-Modified-Since头进行...
下面将详细介绍网络缓存和本地缓存的概念及其在Android中的实现。 **网络缓存** 网络缓存,也称为HTTP缓存,遵循HTTP协议中的缓存策略。当一个图片请求被发送到服务器,服务器会根据响应头中的信息(如`Cache-...
下面将详细介绍Android异步下载图片并且缓存图片到本地DEMO的实现细节。 一、异步下载图片 在Android中,异步下载图片可以使用AsyncTask类来实现。AsyncTask类提供了一个简单的方式来将耗时操作从主UI线程中分离...
3. **网络缓存**:在网络请求图片时,如果服务器返回了可缓存的响应头,我们可以将图片数据暂存到本地,这就是网络缓存。当再次请求同一图片时,可以从网络缓存直接读取,避免了网络延迟。网络缓存可以进一步分为...
unity下载服务器图片保存本地并加载(android和ios),判断本地是否存在,不存在就创建文件.
3. 内置缓存:内置了本地缓存机制,无需额外编写代码即可实现数据的本地存储和读取。 4. 支持多种请求方法:GET、POST、PUT、DELETE等HTTP方法都可轻松使用。 5. 请求参数与Header管理:方便地添加请求参数和自定义...
在Android开发中,HTTP缓存是一种重要的技术,它允许应用程序在本地存储网络请求的数据,以便在没有网络连接或网络连接不稳定时仍能访问这些数据,从而实现离线应用的功能。HTTP缓存主要遵循HTTP协议中的缓存控制...
在新闻列表的缓存实现中,Retrofit负责从服务器获取新闻数据,这些数据可能被存储到本地缓存中供后续使用。 4. Picasso:这是一款强大的图片加载库,能够自动处理图片的缩放、缓存等操作。在新闻列表中,每条新闻...
"Android图片下载三级缓存策略源码Demo" 提供了一种解决方案,它利用了LruCache、软引用以及DiskLruCache来实现三级缓存机制。这种策略能够有效地减少网络请求,提高图片加载速度,同时节省设备资源。现在,让我们...
本项目针对这种情况,利用Android Studio进行开发,实现了分页缓存图片加载器,旨在提高图片加载速度并优化内存管理。 1. **Android GridView** GridView是一种可以显示多列数据的视图,常用于展示图片或列表项。...
本文将深入探讨如何在Android应用中实现图片的网络缓存和本地存储。 首先,我们需要理解Android中的图片缓存分为两大部分:内存缓存和磁盘缓存。内存缓存通常是基于LRU(Least Recently Used)策略的HashMap,用于...
"android图片的异步下载和缓存"这个主题涉及到如何高效、流畅地显示图片,避免阻塞UI线程,并且实现图片的本地缓存,提高用户体验。下面我们将详细探讨这两个核心概念。 1. **异步加载**: 在Android中,主线程...
"Android Google官网的图片缓存源码"是Google官方实现的图片缓存机制的源代码,对于深入理解Android图片加载和缓存机制有着极大的帮助。 首先,我们来讨论一下图片缓存的基本概念。缓存是一种存储机制,用于暂时...
我们一般将网络图片分为三个级别,第一级别是网络层,即根据图片的url地址可以找到服务器上相应图片,获取这一层的图片会消耗流量,所以我们希望可以获取后本地就永久使用,所以就会有接下来的缓存策略;第二层缓存...
综上所述,"android从服务器端下载图片并保存在本地sdcard里并在界面滚动显示出来"这个过程涉及了网络请求、文件操作、图片缓存、异步处理、UI显示优化等多个技术点,需要综合运用多种Android开发技巧和第三方库。...
2. **节省流量和资源**:在网络不稳定或用户流量有限的情况下,缓存图片能保证图片正常显示。 3. **提高性能**:从本地缓存读取图片比从网络下载快得多,提升应用的响应速度。 **二、图片缓存的层次** Android图片...
在网络图片缓存中,当用户首次请求一张图片时,系统会从网络下载该图片并存储到本地(如SD卡),下次再次请求同一图片时,应用可以直接从本地缓存读取,而无需重新发起网络请求。 实现网络图片缓存主要涉及以下几个...