日期:2014-05-16  浏览次数:20331 次

NetJSONAdapter 网络化的adapter(高效) -dhroid文档

关于adapter 我想对于大家来说已经不陌生了,基本应用都会用的很多,不知道现在你是不是还是按一定的套路写很多代码去实现adapter

我想大多数人还是写个adapter继承自baseadapter 实现getView方法(我想大家还会用网络流行的viewholder模式吧),

如果数据来自网络用个网络访问工具访问数据,数据转换,然后add进adapter,如果有下拉刷新,加载更多代码会更多

问题

1.你在写很多重复代码

2.数据管理不是那么容易

3.网络缓存需要处理

?

如果你使用dhroid框架,这些问题可以很好的解决

先看下下面的代码

?

NetJSONAdapter	adapter=new NetJSONAdapter("http://shishangquan.017788.com/mobile_ordermeal_jujiList", this, R.layout.adapter_item);
		//添加参数
		adapter.addparam("key1", "key1");
		//数据绑定
		adapter.addField("username", R.id.name);
		adapter.addField("title", R.id.title);
		//数据绑定 进行文本修饰
		adapter.addField("pubdate", R.id.time,"time");
		//数据绑定 进行图片修饰
		adapter.addField("user_faceimg", R.id.pic,"round");
                //缓存策略
		adapter.useCache(CachePolicy.POLICY_CACHE_AndRefresh);
                //刷新
                adapter.refresh();
	        //绑定到listview中
		listV.setAdapter(adapter);

?

?

//这段代码进行了网络访问,生成视图,数据绑定,缓存策略等问题

会通过R.layout.adapter_item生成视图,这里生成的视图用了重用机制,和ViewHolder模式(居然我感觉ViewHolder用处不大)

?

假设网络返回的结果是

?

{
  success:true,
   data:[{
      username:'藤之内',
      title:'大家好',
      pubdate:1394707561,
       user_faceimg:'头像路径'
    },{

}]
}

?

?

NetJSONAdapter 会自动进行解析数据

  • 会将username绑定到id为R.id.name的textview上
  • 会将pubdate绑定到id为R.id.time 的textview上,这里需要进行数据转化,获取到的值是1394707561,最后显示当然为2012-11-08? ?我们在最后一个参数写为time ?,具体的转化是写到ValueFix接口的(下面在说)
  • 会将user_faceimg获取到的图片路径绑定到R.id.pic的imageView,这里也做了个转化,是将图片截圆角,?我们在最后一个参数写为round,具体的转化是写到ValueFix接口的(下面在说)

? ? adapter.useCache(CachePolicy.POLICY_CACHE_AndRefresh);可以进行缓存策略,具体的缓存策略大家看DhNet的文档吧

?

? ?adapter.refresh();刷新

?

我们先说网络相关的

添加参数 adapter.addparam("key1", "key1");//

加载下一页 adapter.showNext();

加载下一页有对话框 adapter.showNextInDialog();
缓存策略(查看dhnet文档)
adapter.useCache(CachePolicy.POLICY_CACHE_AndRefresh);


加载第一页时是否有对话康 adapter.showProgressOnFrist(true);

?

?

?

?

数据处理相关

?? 拿哪个节点作为数据(支持点分割)

??? adapter.fromWhat("aaa.bbb");

?//如果你的结果不是在某个节点而是需要处理后才有的

		adapter.setDataBulider(new DataBulider() {
			
			@Override
			public JSONArray onDate(Response response) {
				return response.jSONArrayFrom("xxx");
			}
		});

?

	adapter.addField("title", R.id.title);
		//数据绑定 进行文本修饰
		adapter.addField("pubdate", R.id.time,"time");
		//数据绑定 进行图片修饰
		adapter.addField("user_faceimg", R.id.pic,"round");

?如果你需要控制显示与隐藏等

adapter.addField(new FieldMap("activeaddress", R.id.content) {
			@Override
			public Object fix(View itemV, Integer po, Object o, Object jo) {
				JSONObject joo=(JSONObject) jo;
				//这里可以做一些额外的工作
				itemV.findViewById(R.id.icon).setVisibility(JSONUtil.getInt(joo, "status")==1?View.VISIBLE:View.INVISIBLE);
				return o;
			}
		});

?

事件回调每次加载完成后在这处理

	//加载成功后回调
		adapter.setOnLoadSuccess(new LoadSuccessCallBack() {
			@Override
			public void callBack(Response response) {
				if(response.isSuccess()){
					dialoger.showToastShort(getActivity(), "加载成功");
					if(adapter.getPageNo()==1){
						listV.setSelection(0);
					}
					
				}
			}
		});

?

?内部点击事件

	//内部点击事件
		adapter