ContentResolver是数据调用者,ContentProvider将数据发布出来后通过ContentResolver对象结合Uri进行调用。通过ContentResolver可以调用ContentProvider的增、删、改、查操作。
上面使用ContentResolver需要结合Uri进行调用,那么什么是Uri:通用资源标识符简称URI;Uri代表操作数据的地址,每个ContentProvider发布数据都有一个唯一的地址;Uri格式:content://com.android.app/contacts
1.使用SQLine,创建数据库和数据表;2.新建类继承ContentProvider;3.创建UriMatcher定义Uri的规则;4.重写ContentProvider的6个方法;5.在Manifest中注册Provider;6.ContentResolver对ContentProvider共享数据进行操作;
首先在一个项目中完成好数据库表的创建;新建一个类继承ContentProvider;并重写ContentProvider的6个方法;在方法中实现数据库 增、删、改、查的操作;
public class Myprovider extends ContentProvider { @Override //重写onCreate方法 public boolean onCreate() { dbHelpter = new DBHelpter(getContext(), "demodb", null, 1); Log.e("0000000000","onCreate"); return false; } @Nullable @Override //重写query方法、实现查询操作。 public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { SQLiteDatabase db=dbHelpter.getWritableDatabase(); Cursor cursor=null; cursor=db.query("student",projection,selection,selectionArgs,null,null,sortOrder); } Log.e("0000000000000000000","query"); return cursor; } @Nullable @Override //重写getType方法 public String getType(@NonNull Uri uri) { Log.e("0000000000000000000","getType"); return null; } @Nullable @Override //重写insert方法 实现增加操作。 public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { SQLiteDatabase db=dbHelpter.getWritableDatabase(); db.insert("student", null, values); Log.e("0000000000000000000","insert"); return null; } @Override //重写delete方法 实现删除操作 public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) { SQLiteDatabase db=dbHelpter.getWritableDatabase(); db.delete("student",selection,selectionArgs); Log.e("0000000000000000000","delete"); return 0; } @Override //重写update方法 实现更新操作 public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) { SQLiteDatabase db=dbHelpter.getWritableDatabase(); int num=0; num= db.update("student",values,selection,selectionArgs); Log.e("0000000000000000000","update"); return num; }}
在Manifest中注册Provider;其中 "com.example.myapplication.provider“做为Uri的存放地址。
<provider android:exported="true" android:enabled="true" android:authorities="com.example.myapplication.provider" android:name=".entity.Myprovider"> </provider>
在另外一个Project中创建新的Activity作为接受方通过resolver传递参数来实现增、删、改、查的方法。
public class ProviderActivity extends AppCompatActivity implements View.OnClickListener { private Button button; private Button button2; private Button button3; private Button button4; private EditText editText; private EditText editText2; private Uri uri; private ContentResolver resolver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_provider); button = findViewById(R.id.btn_provider); button2 = findViewById(R.id.btn_provider2); button3 = findViewById(R.id.btn_provider3); button4 = findViewById(R.id.btn_provider4); editText=findViewById(R.id.edittext); editText2=findViewById(R.id.edittext2); uri = Uri.parse("content://com.example.myapplication.provider"); resolver = getContentResolver(); button.setOnClickListener(this); button2.setOnClickListener(this); button3.setOnClickListener(this); button4.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_provider2: //增 ContentValues values = new ContentValues(); values.put("Name", ""+editText.getText().toString()); resolver.insert(uri, values); break; case R.id.btn_provider: // 删 resolver.delete(uri, "Name=?", new String[]{editText2.getText().toString()}); break; case R.id.btn_provider3: //查 Cursor cursor=getContentResolver().query(uri,null,null,null,null); while (cursor.moveToNext()){ String s=cursor.getString(cursor.getColumnIndex("Name")); Log.e("000000000000",""+s); } cursor.close(); break; case R.id.btn_provider4: //改 ContentValues contentValues = new ContentValues(); contentValues.put("Name", editText.getText().toString()); resolver.update(uri,contentValues,"Name=?", new String[]{editText2.getText().toString()}); break; } }
联系客服