1.添加布局,相信大家已经习以为常
主界面添加一个ListView控件,在创建一个xml文件添加相应的布局即可.
注意:LIstView控件中的android:layout_height最好指定为match_parent,不要指定为wrap_content
因为:前者它可以根据屏幕的高和LIstView的高算出一个屏幕可以展示出多少的条目,后者算不出来了,是对ListView的优化
2.要使用ContentProvider暴露数据库,需要创建一个类继承ContentProviter(抽象类),重写 onCreate(),query,getType,insert,delete,update方法;
3.由于ContentProvider是四大组件之一,所以需要在清单文件中配置,如下:
4.在创建的类定义路径匹配器
public static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
5.定义静态代码块,添加匹配规则(只执行一次)
static {
//第一个是android:authorities,第二个是path,可以找到具体的方法,第三个是int类型的匹配码
uriMatcher.addURI("cy.cn.contentprovider", "path", 1)
}
6.链接数据库,创建数据库,写一个类继承SqlLiteOpenHelper,重写方法
public class MySqlLiteOpenHelper extends SQLiteOpenHelper {
private static final String TAG="MySqlLiteOpenHelper";
public MySqlLiteOpenHelper(Context context) {
super(context, "Person.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table person(_id integer primary key autoincrement," +
"name varchar(20),number varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG,"版本更新了~~~~~~");
}
}
7.MyProvider一加载,就走onCreate()方法,就链接数据库
@Override
public boolean onCreate() {
MySqlLiteOpenHelper sql = new MySqlLiteOpenHelper(getContext());
return false;
}
8.暴露你想暴露的方法(增删改查方法),以暴露query方法为例
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
int code = uriMatcher.match(uri);
if (code==QUERY){
//说明路径匹配成功,把query方法实现 对数据库进行查询操作,想操作数据库必须或得sqlitedatabase对象
SQLiteDatabase db = sql.getWritableDatabase();
/**projection:要查寻得列
* selection:根据什么条件查询列
* selectionArgs:查询的参数
*/
Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
//cursor不能关闭
return cursor;
}else {
throw new IllegalArgumentException("你的路径不匹配,请检查路经");
}
}
9.在使用ContentProvider暴露数据之前,首先要保证本地数据库里有数据
public class PersonDao {
private final MySqlLiteOpenHelper helper;
//在在构造方法里完成helper的初始化
public PersonDao(Context context){
helper = new MySqlLiteOpenHelper(context);
}
//添加一条数据
public long add(String name,String number){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name",name);
values.put("number",number);
long id = db.insert("person", null, values);
db.close();
return id;
}
}