contentprovider

目录

1.什么是contentprovider

2.框架

3.结果展示


1.什么是contentprovider

ContentProvider的作用是为不同的应用之间数据共享,提供统一的接口,我们知道安卓系统中应用内部的数据是对外隔离的,要想让其它应用能使用自己的数据(例如通讯录)这个时候就用到了ContentProvider。

ContentProvider通过uri来标识其它应用要访问的数据,通过ContentResolver的增、删、改、查方法实现对共享数据的操作。还可以通过注册ContentObserver来监听数据是否发生了变化来对应的刷新页面。

什么是uri?

通用资源标志符(Universal Resource Identifier, 简称"URI")

Uri代表要操作的数据,Android上可用的每种资源 (图像、视频片段、网页等) 都可以用Uri来表示。

从概念上来讲,URI包括URL

2.框架

建一个provider,然后在另一个app中使用resolver调用这个provider。

resolver

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ContentResolver resolver=getContentResolver();



        Button button=findViewById(R.id.button1);

        ContentValues values=new ContentValues();
        values.put("name","rs");
        values.put("age",22);
        ContentValues values1=new ContentValues();
        values1.put("name","djy");
        values1.put("age",26);
        Uri uri=Uri.parse("content://rs.provider/student");


        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                resolver.insert(uri,values);
                resolver.insert(uri,values1);
            }
        });
    }
}

注意在manifest文件中添加

<queries>
    <package android:name="com.example.provider"></package>
</queries>

获取权限

provider

dbhelper文件,创建数据库

public class MyDBhelper extends SQLiteOpenHelper {
    public MyDBhelper(@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

   private  Context context;
    private  SQLiteDatabase database;
    public MyDAO(Context context){

        this.context=context;
        MyDBhelper dBhelper=new MyDBhelper(context,"rsDB",null,1);
        database=dBhelper.getWritableDatabase();
    }
    public Uri DAOinsert(ContentValues contentValues){
        long rowid=database.insert("student",null,contentValues);

        Uri uri=Uri.parse("content://rs.provider");
        Uri inserturi= ContentUris.withAppendedId(uri,rowid);
        context.getContentResolver().notifyChange(inserturi,null);
        return inserturi;
    }

}

在file->other->ContentProvider创建文件

修改代码

@Override
    public Uri insert(Uri uri, ContentValues values) {
        // TODO: Implement this to handle requests to insert a new row.
        //getContext().getContentResolver().insert(uri,values);
        return myDAO.DAOinsert(values);
    }

    @Override
    public boolean onCreate() {
        // TODO: Implement this to initialize your content provider on startup.
        Context context=getContext();
        myDAO=new MyDAO(context);
        return false;
    }

3.结果展示

代码:仓库 - luludadaa (luludadaa) - Gitee.com

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值