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

本文介绍了如何在Android中使用ContentProvider进行数据操作,包括插入、查询、更新和删除数据的基本实现。同时展示了如何通过ContentResolver在不同进程中调用ContentProvider进行跨进程通信。最后,作者分享了关于职业选择的心得,建议大家根据自己的目标和规划选择合适的公司。
摘要由CSDN通过智能技术生成

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 !如果目前有一份工作也请好好珍惜好好努力,找工作其实挺累挺辛苦的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值