缓存操作流程逻辑

以加载图文数据的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);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值