您的位置:首页 > 其它

缓存操作流程逻辑

2015-10-28 00:02 218 查看
以加载图文数据的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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: