1.结构化分
1)主界面:用来显示数据库列表,并响应menu菜单
本程序为GContact.java,其主布局文件为contact_list.xml,其ListView的id必须声明为android:id="@+id/android:list",这样系统才可
以在ListActivity里引用的到
2 ) SQLiteOpenHelper类,该类里定义数据库名字:DATABASE_NAME = "bbbcontact.db" 并创建数据库表 表名:contactstable
每个数据库表至少有一个字段_id。
3)ContentProvider,其提供了数据库的增删该查方法,在此声明uri
4)添加数据到数据库,AddContact.java,此界面完成添加数据和修改数据功能。
2.结构关系
1)ContentProvider中用到SQLiteOpenHelper,在ContentProvider中的onCreate里创建DBHelper:
dbHelper = new DBHelper(getContext());
通过 SQLiteDatabase db = dbHelper.getReadableDatabase();
SQLiteDatabase db = dbHelper.getWritableDatabase(); 对数据库进行操作
2)当程序界面需要对数据库进行更改时,不需要操作ContentProvider,而是操作getContentResolver,通过该接口即可访问
ContentProvider提供的数据
3)在ContentProvider中定义URI: public static final Uri CONTENT_URI = Uri.parse("content://"+AUTHORITY+"/contacts");
其中“content://"为固定部分,AUTHORITY为权限声明,在manifext.xml文件中进行权限声明:
<provider android:name="ContactProvider" android:authorities="com.bbb.contact"/>
public static final String AUTHORITY = "com.bbb.contact";
两字符串保持一致即可。
当检索到数据库中的一组数据时,其uri后增加字段ID,无ID返回全部数据。
4)由于添加和修改数据都要进入到AddContact.java中,故在跳转之前GContact.java中增加字段
intent.setAction(AddContact.EDIT_TABLE_ACTION)表示为修改
并在AddContact.java中进行判断,action = getIntent().getAction() EDIT_TABLE_ACTION.equals(action)
即可分辨是跳转到修改还是增加功能。
3.程序截图
TabContact.java
GContact.java
AddContact.java
DBHelper.java
ContactProvider.java