0
点赞
收藏
分享

微信扫一扫

ContentProvider的简单使用,阿里一线架构师技术图谱

杏花疏影1 2022-02-04 阅读 46

public boolean onCreate() {

mContext = getContext();

// 在ContentProvider创建时对数据库进行初始化

// 运行在主线程,故不能做耗时操作,此处仅作展示

mDbHelper = new DBHelper(getContext());

db = mDbHelper.getWritableDatabase();

// 初始化两个表的数据(先清空两个表,再各加入一个记录)

db.execSQL(“delete from user”);

db.execSQL(“insert into user values(1,‘Carson’);”);

db.execSQL(“insert into user values(2,‘Kobe’);”);

db.execSQL(“delete from job”);

db.execSQL(“insert into job values(1,‘Android’);”);

db.execSQL(“insert into job values(2,‘iOS’);”);

return true;

}

/**

  • 添加数据

*/

@Override

public Uri insert(Uri uri, ContentValues values) {

// 根据URI匹配 URI_CODE,从而匹配ContentProvider中相应的表名

// 该方法在最下面

String table = getTableName(uri);

// 向该表添加数据

db.insert(table, null, values);

// 当该URI的ContentProvider数据发生变化时,通知外界(即访问该ContentProvider数据的访问者)

mContext.getContentResolver().notifyChange(uri, null);

// // 通过ContentUris类从URL中获取ID

// long personid = ContentUris.parseId(uri);

// System.out.println(personid);

return uri;

}

/**

  • 查询数据

*/

@Override

public Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder) {

// 根据URI匹配 URI_CODE,从而匹配ContentProvider中相应的表名

// 该方法在最下面

String table = getTableName(uri);

// // 通过ContentUris类从URL中获取ID

// long personid = ContentUris.parseId(uri);

// System.out.println(personid);

// 查询数据

return db.query(table, projection, selection, selectionArgs, null,

null, sortOrder, null);

}

/**

  • 更新数据

*/

@Override

public int update(Uri uri, ContentValues values, String selection,

String[] selectionArgs) {

// 由于不展示,此处不作展开

return 0;

}

/**

  • 删除数据

*/

@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

// 由于不展示,此处不作展开

return 0;

}

@Override

public String getType(Uri uri) {

// 由于不展示,此处不作展开

return null;

}

/**

  • 根据URI匹配 URI_CODE,从而匹配ContentProvider中相应的表名

*/

private String getTableName(Uri uri) {

String tableName = null;

switch (mMatcher.match(uri)) {

case User_Code:

tableName = DBHelper.USER_TABLE_NAME;

break;

case Job_Code:

tableName = DBHelper.JOB_TABLE_NAME;

break;

}

return tableName;

}

}

exported代表设置此provider是否可以被其他进程使用

<provider

android:name=".contentpro.MyProvider"

android:authorities=“com.gs.sumok2”

android:exported=“true” />

进程二:

新建一个或者在另一个APP中

ContentResolver通过对应匹配的uri去调用对应的进程一的contentprovider的不同的表进行增删改查操作

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

getOtherAppData();

最后

希望大家能有一个好心态,想进什么样的公司要想清楚,并不一定是大公司,我选的也不是特大厂。当然如果你不知道选或是没有规划,那就选大公司!希望我们能先选好想去的公司再投或内推,而不是有一个公司要我我就去!还有就是不要害怕,也不要有压力,平常心对待就行,但准备要充足。最后希望大家都能拿到一份满意的 offer !如果目前有一份工作也请好好珍惜好好努力,找工作其实挺累挺辛苦的。

由于篇幅有限,这里以图片的形式给大家展示一小部分。可以点击GitHub免费获取

的形式给大家展示一小部分。可以点击GitHub免费获取

[外链图片转存中…(img-EGOefcmk-1643955193083)]

举报

相关推荐

0 条评论