ContentProvider内容提供者(四大组件之一)主要用于在不同的应用程序之间实现数据共享的功能
1.提供方:ContentProvider
(1)创建数据库,自定义类继承SQLiteOpenHelper
(2)自定义内容提供者类,继承ContentProvider,重写insert/delete/update/query方法,向外界提供方法
(3)清单文件中注册内容提供者
2.索要方:ContentResolver
(1)通过Context的getContentResolver方法获得ContentResolver对象
(2)确定uri
内容提供方
首先你要有一个数据库 (数据库简介请链接 https://blog.csdn.net/SageDeceiveFiend/article/details/90245533)
public class MyOpenHelper extends SQLiteOpenHelper {
public MyOpenHelper(Context context) {
super(context, "student1702C", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE student(_id integer PRIMARY KEY AUTOINCREMENT ,NAME VARCHAR(20),sex VARCHAR(20),brith INT,department VARCHAR(20),address VARCHAR(20))");
db.execSQL("CREATE TABLE score(_id integer PRIMARY KEY AUTOINCREMENT,stu_id INT ,c_name VARCHAR(20),grade INT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
提供者 继承内容提供者重写6个方法
public class MyContentProvider extends ContentProvider {
private MyOpenHelper myOpenHelper;
private SQLiteDatabase sd;
@Override
public boolean onCreate() {
myOpenHelper=new MyOpenHelper(getContext());
sd = myOpenHelper.getWritableDatabase();
if(sd==null){
return false;
}
return true;
}
@Override
public Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder) {
return sd.query("student",projection,selection,selectionArgs,null,null,sortOrder);
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
sd.insert("student",null,values);
return uri;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return sd.delete("student",selection,selectionArgs);
}
@Override
public int update( Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return sd.update("student",values,selection,selectionArgs);
}
}
清单文件需要增加provider
<provider
//自定义的uri
android:authorities="com.content"
//重写ContentProvider的类
android:name=".MyContentProvider"
//设置是否对外公开
android:exported="true"/>
</application>
索求方
public class MainActivity extends AppCompatActivity {
ContentResolver contentResolver;
//content://为固定格式
Uri uri = Uri.parse("content://com.content");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取索求方
contentResolver = getContentResolver();
}
public void insert(View view) {
}
public void select(View view) {
String[] s = {"name", "address"};
//直接索求方的查找方法
Cursor query = contentResolver.query(uri, s, null, null, null);
while (query.moveToNext()) {
User user = new User();
user.name = query.getString(query.getColumnIndex("name"));
user.phone = query.getString(query.getColumnIndex("address"));
Log.i("###", "select:" + user);
}
}
public void delect(View view) {
}
public void update(View view) {
}
class User {
String name;
String address;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
}