缓存操作流程逻辑
2015-10-28 00:02
218 查看
以加载图文数据的listview:
要保存的数据:json数据+图片数据(bitmap)
1、判断缓存中是否存在该缓存json数据
(1)、若是不存在,则加载新的:
—->异步操作:
—–》实现适配器:加载数据(缓存和网络)
(2)、若是存在缓存,则加载缓存数据:
要保存的数据:json数据+图片数据(bitmap)
1、判断缓存中是否存在该缓存json数据
// 判断缓存中是否有数据 JSONArray categorydata = (JSONArray) mCache.getAsJSONArray("categoryData");
(1)、若是不存在,则加载新的:
else { RequestParams params5 = new RequestParams(); params5.addQueryStringParameter("id", faId_index); http.send(HttpMethod.POST, Config.getCatatoryList, params5, new RequestCallBack<String>() { @Override public void onStart() { } @Override public void onLoading(long total, long current, boolean isUploading) { } @Override public void onSuccess(ResponseInfo<String> responseInfo) { try { JSONArray jsonarr = new JSONArray( responseInfo.result); // 保存json数据到缓存中 mCache.put("categoryData", jsonarr); // 指定异步加载数据 Message msg = new Message(); msg.obj = jsonarr; msg.what = 1; handler.sendMessage(msg); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onFailure(HttpException error, String msg) { } }); }
—->异步操作:
// 异步操作 Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { try { JSONArray jsonarr = (JSONArray) msg.obj; int dd_count = jsonarr.length(); list.clear(); for (int i = 0; i < dd_count; i++) { JSONObject jsonob = jsonarr.getJSONObject(i); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("pic", jsonob.get("imgUrl_small")); map.put("title1", jsonob.get("name")); map.put("title2", jsonob.get("desc")); map.put("categoryids", jsonob.get("id")); list.add(map); } if (msg.what == 1) { myCatergorAdapter = new CatergoryAdapter( CategoryActivity.this, list, mCache, 1); } else if (msg.what == 2) { myCatergorAdapter = new CatergoryAdapter( CategoryActivity.this, list, mCache, 2); } } catch (Exception ex) { } finally { catergory_listview.setAdapter(myCatergorAdapter); catergory_listview .setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterview, View view, int parent, long id) { try { Intent intent = new Intent( CategoryActivity.this, CategoryprodshowActivity.class); intent.putExtra("typeId", String .valueOf(list.get(parent).get( "categoryids"))); startActivity(intent); } catch (Exception ex) { } } }); } }; };
—–》实现适配器:加载数据(缓存和网络)
@SuppressWarnings("null") @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = new ViewHolder(); layoutInflater = LayoutInflater.from(context); // 组装数据 if (convertView == null) { convertView = layoutInflater.inflate( R.layout.activity_category_item, null); holder.image = (ImageView) convertView .findViewById(R.id.catergory_image); holder.title = (TextView) convertView .findViewById(R.id.catergoryitem_title); holder.content = (TextView) convertView .findViewById(R.id.catergoryitem_content); holder.goto_btn = (ImageView) convertView .findViewById(R.id.goto_btn); // 使用tag存储数据 convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.title.setText(aalist.get(position).get("title1").toString()); holder.content.setText(aalist.get(position).get("title2") .toString()); final String img_url2 = aalist.get(position).get("pic").toString(); //判断加载的是网络图片还是缓存的图片 if(itemtype==1){ final String img_url = Config.url_header2+aalist.get(position).get("pic").toString(); BitmapUtils bitmap = new BitmapUtils(context); bitmap.display(holder.image, img_url); //数据缓存操作 new Thread() { public void run() { // 图片资源 //String url = "http://start.firefoxchina.cn/img/worldindex/logo.png"; // 得到可用的图片 Bitmap bitmap = ImgUtils.getHttpBitmap(img_url);//getHttpBitmap(url); Bundle b = new Bundle(); b.putString("img_url2", img_url2); Message msg=new Message(); msg.setData(b); msg.what=1; msg.obj=bitmap; handler.sendMessage(msg); // imageView.setBackgroundResource(R.drawable.ic_launcher); }; }.start(); }else if(itemtype==2){ Bitmap bitcache=mCache.getAsBitmap(img_url2); holder.image.setImageBitmap(bitcache); } return convertView; } public class ViewHolder { ImageView image; TextView title; TextView content; ImageView goto_btn; } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { int s = msg.what; if(s==1){ Bundle b=msg.getData(); Bitmap bits=(Bitmap) msg.obj; String img_url3=(String) b.get("img_url2"); mCache.put(img_url3, bits); } } };
(2)、若是存在缓存,则加载缓存数据:
if (categorydata != null) { // 指定异步加载数据 Message msg = new Message(); msg.obj = categorydata; msg.what = 2; handler.sendMessage(msg); }
相关文章推荐
- Crazyflie2.0笔记四: eclipse编译、开发环境搭建
- HDU 4676 Sum Of Gcd(莫队+莫比乌斯反演)
- fs4412开发板学习笔记(十五)
- LeetCode——Single Number II
- JS模板引擎 :ArtTemplate (2)
- Interface接口的实现
- JDK+Tomcat安装和配置
- windows7下maven的安装及配置 +nexus私服的搭建
- linux shell 编程2 if then else fi 字符串空的判断
- nginx根据域名动态代理
- html5 canvas实现的手机端签字板
- Ubuntu下 JDK 安装
- routejs blueprints rest model url salias 11
- setInterval与setTimeout的区别 nodejs
- ubuntu redis php 安装
- ubuntu14.04 部署JDK+Tomcat+MySQL
- MySQL中文乱码问题和不能存中文问题
- Mysql主从配置,实现读写分离
- Auto Layout 使用心得(五)—— 根据文字、图片自动计算 UITableViewCell
- Android dp2px