9 cursoradapter的原理和使用_注意_id的问题

来源:互联网 发布:数控车床车35圆球编程 编辑:程序博客网 时间:2024/06/06 11:03
public Cursor getCursor(){Cursor cursor=null;SQLiteDatabase db=openHelp.getReadableDatabase();if(db.isOpen()){/** * Cursor 如果使用这种返回回去,那么这个表结构就要设计的主键必须要有_id . * 这就是为什么我们在android中设计表结构主键的时候都是以_id的 * 如果我们设计的不能再改变了,我们只能使用另外一种查询方式,自己写sql语句 *///cursor=db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);String sql="select personid as _id ,name,phone from person";cursor=db.rawQuery(sql,null);//db.close();}else{System.out.println("数据库没有打开");}return cursor;}

这里如果要返回游标,那么我们的游标不要close。连数据库也不能close

如果游标没有关闭,而我们的数据库关闭了,会产生以下异常。

解决这个的在于我们将db或者游标关闭了。

以下是activity的代码,与SimpleAdapter相似

package org.sicn.lee.contentvaluedemo;import org.sicn.lee.dao.PersonDAO;import android.app.Activity;import android.database.Cursor;import android.os.Bundle;import android.widget.ListView;import android.widget.SimpleCursorAdapter;public class MainActivity extends Activity {private ListView lv;private Cursor cursor; private PersonDAO dao;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.activity_main);this.lv=(ListView) super.findViewById(R.id.lv);dao=new PersonDAO(this);this.cursor=dao.getCursor();this.lv.setAdapter(new SimpleCursorAdapter(this,R.layout.person_item,cursor,new String[]{"name","phone"},new int[]{R.id.name,R.id.phone}));}}


0 0
原创粉丝点击