这是写Provider需要在AndroidManifest文件中添加这些。特别是最后一项。
另外写Provider不需要界面。
用来存放所有合法的Uri的容器
private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); static { matcher.addURI("com.example111.sxy.l_contentprovider.personprovider","person",1); matcher.addURI("com.example111.sxy.l_contentprovider.personprovider","person/#",2);}存放一些合法的Uri 有id 没有id
query() insert() delete() update() 方法步骤如下:
1 得到连接对象
2 匹配uri 返回code
3 如果合法 进行查询 (根据id,不根据id)不合法就抛异常。
@Overridepublic Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) { //得到连接对象 SQLiteDatabase database = dbHelper.getReadableDatabase(); //1 匹配uri,返回code int code = matcher.match(uri); //2 如果合法 进行查询(根据id,不根据id) 不合法就抛异常 if(code==1){ Cursor cursor = database.query("person",strings,s,strings1,null,null,null); return cursor; }else if (code==2){ //既然是根据id查就得先得到id Long id = parseId(uri); Cursor cursor = database.query("person",strings,"_id=?",new String[]{id+""},null,null,null); return cursor; }else { throw new RuntimeException("异常"); }}插入只能是不根据id插入
@Override//只能是没有id插入public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) { SQLiteDatabase database = dbHelper.getReadableDatabase(); int code = matcher.match(uri); if(code==1){ Long id = database.insert("person",null,contentValues); uri = ContentUris.withAppendedId(uri,id); database.close(); return uri; }else { database.close(); throw new RuntimeException("插入异常"); }}删除可以根据内容删除也可以根据id删除
@Overridepublic int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) { SQLiteDatabase database = dbHelper.getReadableDatabase(); int code = matcher.match(uri); int deleteCount = -1; if(code == 1){ deleteCount = database.delete("person",s,strings); database.close(); }else if(code == 2){ Long id = ContentUris.parseId(uri); deleteCount = database.delete("person","_id="+id,null); database.close(); }else { database.close(); throw new RuntimeException("删除错误"); } return deleteCount;}更新可以根据内容也可以根据id更新
public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) { SQLiteDatabase database = dbHelper.getReadableDatabase(); int code = matcher.match(uri); int updateCount = -1; if(code == 1){ updateCount = database.update("person",contentValues,s,strings); database.close(); }else if (code == 2){ Long id = ContentUris.parseId(uri); updateCount = database.update("person",contentValues,"_id="+id,null); database.close(); }else { database.close(); throw new RuntimeException("删除错误"); } return updateCount;}ContentResolver应用需要界面
query() insert() update() delete()
1 得到ContentResolver 对象
2 调用其query() 得到cursor
3 取出cursor中的数据, 并显示
public void query(View v){ //1 得到ContentResolver对象 ContentResolver resolver = getContentResolver(); //2 调用其query 得到cursor Uri uri = Uri.parse("content://com.example111.sxy.l_contentprovider.personprovider/person"); Cursor cursor = resolver.query(uri,null,null,null,null); //3 取出cursor中的数据,并显示 while (cursor.moveToNext()){ int id = cursor.getInt(0); String name = cursor.getString(1); Toast.makeText(this,id+":"+name,Toast.LENGTH_LONG).show(); }} public void insert(View v){ ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse("content://com.example111.sxy.l_contentprovider.personprovider/person"); ContentValues contentValues = new ContentValues(); contentValues.put("name","haha"); uri = resolver.insert(uri,contentValues); Toast.makeText(this,uri.toString(),Toast.LENGTH_LONG).show();} public void update(View v){ ContentResolver contentResolver = getContentResolver(); Uri uri = Uri.parse("content://com.example111.sxy.l_contentprovider.personprovider/person/2"); ContentValues contentValues = new ContentValues(); contentValues.put("name","ll"); int count = contentResolver.update(uri,contentValues,null,null); Toast.makeText(this,"count"+count,Toast.LENGTH_LONG).show();} public void delete(View v){ ContentResolver contentResolver = getContentResolver(); Uri uri = Uri.parse("content://com.example111.sxy.l_contentprovider.personprovider/person/2"); int delectCount = contentResolver.delete(uri,null,null); Toast.makeText(this,"delectCount"+delectCount,Toast.LENGTH_LONG).show();}以上。