缓存操作流程逻辑

来源:互联网 发布:精子优化处理检查 编辑:程序博客网 时间:2024/05/16 13:51

以加载图文数据的listview:
要保存的数据: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);        }
0 0
原创粉丝点击