1 ContentProvider(内容提供者)是Android中的四大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作
A 在内容提供者中新建一个类继承 ContentProvider
B 重写里面的六个方法:onCreate(); 在创建ContentProvider时调用
getType(); 用于返回指定的Uri中的数据的MIME类型
query(); 进行查询时调用
detele(); 进行删除操作时调用
update(); 进行修改操作时调用
insert(); 进行增加操作时调用
C 在项目的清单文件中配置
其中authorities 是唯一的,最好的包名+_____
name 对应的该类名
exported 是否被发现(暴露,数据共享)
完成这三步 ContentProvider(内容提供者)基本上算是写完了
public class MyContentProvider extends ContentProvider{ private SQLiteDatabase db; private UriMatcher uriMatcher; @Override public boolean onCreate() { //创建数据库 DBUtil dbutil = new DBUtil(getContext(), "G150820.db", null, 1); db = dbutil.getReadableDatabase(); return false; } @Nullable @Override public String getType(Uri uri) { return null; } @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return db.query(false,"student",projection,selection,selectionArgs,null,null,sortOrder,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) { // db.update("student",values,selection,selectionArgs); return 0; } }
2 当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver();
A 要得到被人的数据,首先得获取内容访问者
ContentResolver ct=getContResolver();
B 模拟一个查询,那么其他的增删改就是一样的了:代码如下
ct.query();ct.insert();ct.update();ct.delete();
Uri指定了将要操作的ContentProvider,其实可以把一个Uri看作是一个网址,我们把Uri分为三部分。
第一部分是"content://"。可以看作是网址中的"http://"。
第二部分是主机名或authority,用于唯一标识这个ContentProvider,外部应用需要根据这个标识来找到它。可以看作 是网址中的主机名,比如"blog.csdn.NET"。
第三部分是路径名,用来表示将要操作的数据。可以看作网址中细分的内容路径。
uri = Uri.parse("content://com.mdf_android01.android10sqlite.content/student");Uri.parse中的参数必须为上个项目(ContentProvider(内容提供者))清单文件中authorities 的值,
并在前面加 content:// 即可
public class MainActivity extends AppCompatActivity { private ContentResolver ct; private SimpleCursorAdapter simplecursorAdapter; private Uri uri; private Cursor cursor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); date(); //获取内容访问者 ct = getContentResolver(); } public void getAll(View view){ //查询所有 uri = Uri.parse("content://com.mdf_android01.android10sqlite.content/student");
cursor = ct.query(uri,null,null,null,null);while(cursor.moveToNext()){ int id=cursor.getInt(cursor.getColumnIndex("_id")); String name=cursor.getString(cursor.getColumnIndex("name")); int age=cursor.getInt(cursor.getColumnIndex("age")); Log.i("text", "getAll: "+id+name+age); }}
}
方法。