找几个一起学习的小伙伴有没有。。。。。
找几个一起学习的小伙伴有没有。。。。。
找几个一起学习的小伙伴有没有。。。。。
正式开始说ContentProvider
ContentProvider的作用是为不同的应用之间数据共享,提供统一的接口.
总之就是程序a通过暴露CententProvider的方式,其他应用b、c、d等就可以通过CententResolver的方式来访问CententProvider暴露的数据,已达到其他应用可以访问a内部数据的效果。
即使不启动a也可以实现增删改查。
话不多说先建一个CententProvider
过程如下(也可以手动)
这里其实可以随便写,但是最好还是和你的包名一样com.xxx+classname
建完了就是这个样子
package com.hrk.myapplication;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
public class MyContentProvider extends ContentProvider {
public MyContentProvider() {
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// Implement this to handle requests to delete one or more rows.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public String getType(Uri uri) {
// TODO: Implement this to handle requests for the MIME type of the data
// at the given URI.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO: Implement this to handle requests to insert a new row.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public boolean onCreate() {
// TODO: Implement this to initialize your content provider on startup.
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO: Implement this to handle query requests from clients.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO: Implement this to handle requests to update one or more rows.
throw new UnsupportedOperationException("Not yet implemented");
}
}
接着一个一个说
- onCreate
第一次创建该ContentProvider时调用 - getType
用于返回指定的Uri中的数据MIME类型
(MIME是啥,百度一下你就知道) - query
实现查询功能,返回查询到的Cursor - insert
用于向指定uri的ContentProvider中添加数据,返回添加的Cursor - update
用户更新指定uri的数据,返回修改的条数 - delete
用于删除指定uri的数据,返回删除的条数
我们做些修改以方便测试
package com.hrk.cr1;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;
public class MyContentProvider extends ContentProvider {
private static final String TAG = "ssd";
public MyContentProvider() {
}
@Override
public boolean onCreate() {
Log.i(TAG, "onCreate: ");
return true;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
Log.i(TAG, "query: "+selection);
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
Log.i(TAG, "insert: "+values);
return null;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
Log.i(TAG, "update: "+values+"-"+selection);
return 0;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
Log.i(TAG, "update: "+selection);
return 0;
}
}
然后我们看一下AndroidManifest.xml
<provider
android:name=".MyContentProvider"
android:authorities="com.hrk.MyContentProvider"
android:enabled="true"
android:exported="true"/>
- name:实现类的类名
- authorities:刚刚我们填写的uri
- exported:是否允许其他应用调用qu
除此之外
- readPermission:设置读权限(也就是query方法)
- writePermission:设置写权限(也就是insert、update、delete方法)
接下来我们再建一个Module
未完待续。。。。。