一、从数据库中读取数据并显示列表时,有两种数据绑定方式,一种是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) ;