最不知疲倦的事情就是我们最喜欢的事情
内容提供者ContentProvider,UriMatcher
说到,内容提供者,我们立马想到的应该是数据库,让我们先去建立数据库吧
> public class MySqliteOpenHelper extends SQLiteOpenHelper {
public MySqliteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
继承SQLiteOpenHelper要我们实现这三个方法,先看下构造函数,第一个参数是上下文,第二个参数是数据库名,第三个参数是..我也没用过,一般填null,第四个参数是数据库的版本号,版本号是什么意思呢,是这样的,当我们new MySqliteOpenHelper对象的时候,如果同一数据库传入版本号1即会执行onCreat方法,你再继续接着new还传版本号1的话,就不执行onCreat了,因为版本1的数据库已经决定好了,但是同一数据库如果你传2的话,这是表明数据库升级了,这时候执行onUpgrade这个方法.好了,我们这里不需要对数据库进行升级,也只创建一个数据库,所以我们把这个类改造一下
> public MySqliteOpenHelper(Context context) {
super(context, "db1", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE myTableName(_id integer primary key autoincrement, name TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
在onCreat中我们创建了一个表,名字叫做,没错,就叫做我的表名myTableName,它有两个字段_id主键,这android系统的数据库也喜欢把这个当主键,我们跟随潮流,还有一个字段就是name了,好了SqliteOpenHelper搞好了,我们开始我们的内容提供者吧
> public class MyContentProvider extends ContentProvider{
@Override
public boolean onCreate() {
return false;
}
@Nullable
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return null;
}
@Nullable
@Override
public String getType(Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
ContentProvider是一个抽象类,继承它要我们实现上面那些方法.看到onCreat方法,我们当然看它了,点进去看看
> *
* @return true if the provider was successfully loaded, false otherwise
*/
public abstract boolean onCreate();
前面还有一大堆介绍的,有点长.意思就是说如果我们的SQLiteOpenHelper准备好了后就返回true否则返回false,所以我们这样改
> private MySqliteOpenHelper mMySqliteOpenHelper;
@Override
public boolean onCreate() {
mMySqliteOpenHelper = new MySqliteOpenHelper(getContext());
return mMySqliteOpenHelper != null;
}
接下来我们做什么呢,等等,内容提供者是四大组件之一啊,所以我们应该去清单文件中配置下它啊
> <provider
android:name=".db.MyContentProvider"
android:authorities="com.it.contentprovidernote.myauthorities"/>
看到这个authorities没有,我们俗称主机名,怎么翻译来的我也不知道….如果不配置它是会提示有错误!当然配置成什么样根据自己决定.配置好主机名就轮到我们的UriMatcher登场了
> public static