开发Android过程中遇到的一些问题(持续整理)

一、从数据库中读取数据并显示列表时,有两种数据绑定方式,一种是SimpleAdaper方式绑定ListView,一种是采用SimpleCursorAdapter方式绑定,采用SimpleAdaper方式绑定时,需要将service层返回的数据结果转化成Map<String,Object>,而采用SimpleCursorAdapter方式绑定时,可直接绑定返回的Cursor结果,但采SimpleCursorAdapter绑定时,会抛出java.lang.IllegalArgumentException: column '_id' does not exist异常,根据查看源代码,原因为采用此方法绑定数据的数据表主键必须使用"_id"命名,因此在设计数据库时,最好将主键名称设置为"_id",如果没有设置,则可以在SQL语句将主键增加别名。二种绑定方法代码如下:

1、利用SimpleAdaper方式绑定:

List<Person> persons = personService.getAll(0, 5);
        List<Map<String,Object>> data = new ArrayList<Map<String,Object>>() ;
        for(Person person:persons){
        	Map<String,Object> map = new HashMap<String,Object>() ;
        	map.put("id", person.getId()) ;
        	map.put("name", person.getName()) ;
        	map.put("amount", person.getAmount()) ;
        	data.add(map) ;
        }
        SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, new String[]{"id","name","amount"}, new int[]{R.id.id,R.id.name,R.id.amount}) ;
        listView.setAdapter(adapter) ;

 

用此种方式绑定时,点击行事件中利用getItemAtPosition获取数据返回的结果也为Map<String,Object>方式:

ListView lView = (ListView) parent ;
HashMap<String,Object> item = (HashMap<String,Object>)lView.getItemAtPosition(position) ;

 

2、利用SimpleCursorAdapter方式绑定数据:

Cursor cursor = personService.getAllByCusor(0, 5) ;
        SimpleCursorAdapter adapter1 = new SimpleCursorAdapter(this, R.layout.item, cursor, new String[]{"_id","name","amount"}, new int[]{R.id.id,R.id.name,R.id.amount}) ;
        listView.setAdapter(adapter1) ;

 

用此种方式绑定,getItemAtPosition直接返回Cursor:

ListView lView = (ListView) parent ;
Cursor cursor = (Cursor)lView.getItemAtPosition(position) ;



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值