赞
踩
ContentProvider可以帮助应用程序管理对自己存储的数据的访问, 由其他应用存储,并提供与其他应用共享数据的方法。它们封装了数据,并提供定义数据安全性的机制。内容提供商是标准 将一个进程中的数据与另一个进程中运行的代码连接起来的接口
ContentProvider方法
首先manifest声明,有两种方式(Android 11更新后改变了当前应用于本机其他应用进行交互的方式)保险都写一遍
<application>
...
<provider
android:name=".MyContentProvider"
android:authorities="com.example.provider.MyContentProvider"
android:enabled="true"
android:exported="true">
</provider>
</application>
<queries>
<provider android:authorities="com.example.provider.MyContentProvider"
android:enabled="true"
android:exported="true" />
</queries>
官方文档说明
https://developer.android.google.cn/guide/topics/providers/content-provider-creating#ContentURI
内容 URI 是标识提供程序中的数据的URI。内容 URI 包括 整个提供程序的符号名称(其权限)和 指向表或文件的名称(路径)。可选 id 部分指向 表中的单个行。每个数据访问方法都有一个内容 URI 作为参数;这使您可以 确定要访问的表、行或文件
官方建议
https://developer.android.google.cn/guide/topics/providers/content-provider-creating?hl=en#kotlin
eq.
content://com.example.app.provider/table1
:调用的表。table1com.example.app
包名provider
ContentProvider java文件名和数据库增删查改类似,定义好数据库的增删查改,用ContentProvider包装一下
如下
mydb.java
public class mydb extends SQLiteOpenHelper {
public mydb(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table student ("+
"id integer primary key autoincrement,name varchar,age integer)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
mydao.java
public class mydao { private Context context; private SQLiteDatabase database; public mydao(Context context){ this.context=context; mydb dbhelper=new mydb(context,"db",null,1); database=dbhelper.getWritableDatabase(); Log.d("qwe","getWritableDatabase"); } public Uri Daoinsert(ContentValues contentValues){ long rowid=database.insert("student",null,contentValues); Uri uri=Uri.parse("content://com.example.provider.MyContentProvider/student"); Uri inserturi=ContentUris.withAppendedId(uri,rowid); context.getContentResolver().notifyChange(inserturi,null); return inserturi; } public Cursor query(String[] whichone,String selection,String[] selectionArgs,String sortOrder) { Log.d("qwe","ok"); Cursor cursor1 = database.query("student",whichone,selection,selectionArgs, null,null,sortOrder); return cursor1; } }
MYContentProvider.java
(只用了查,增操作)
public class MyContentProvider extends ContentProvider { private mydao mydao; public MyContentProvider() { } @Override public String getType(Uri uri) { return "1"; } @Override public Uri insert(Uri uri, ContentValues values) { getContext().getContentResolver().insert(uri,values); return mydao.Daoinsert(values); } @Override public boolean onCreate() { mydao=new mydao(this.getContext()); return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return mydao.query(projection,selection,selectionArgs,sortOrder); } }
以下下查询content://com.example.provider.MyContentProvider/student
的age>0的内容
注释的地方是insert操作,
public class MainActivity extends AppCompatActivity { private String d=""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = findViewById(R.id.button_resovel); TextView textView=findViewById(R.id.textView_resovel); ContentResolver resolver = getContentResolver(); ContentValues values= new ContentValues(); values.put("name","sb"); values.put("age","20"); Uri uri = Uri.parse("content://com.example.provider.MyContentProvider/student"); // button.setOnClickListener(v -> resolver.insert(uri,values)); button.setOnClickListener(v -> { Cursor cursor = resolver.query(uri, null, null, null, null); while (cursor.moveToNext()) { @SuppressLint("Range") String name = cursor.getString(cursor. getColumnIndex("name")); @SuppressLint("Range") int age = cursor.getInt(cursor. getColumnIndex("age")); @SuppressLint("Range") int id = cursor.getInt(cursor. getColumnIndex("id")); Log.d("db", "id=" + id + "|name=" + name + "|age=" + age); d += ("id=" + id + "|name=" + name + "|age=" + age); } textView.setText(d); } ); } }
左边提供者,右边接收者
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。