移动开发----ContentProvider之获取数据

1. 设计目标

利用contentprovider获取数据

2.实现功能

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

3.代码分析

首先,在AS上创建两个新项目,命名为Myreceiver和Mycontentprovider

Myreceiver项目

其布局和mainactivity代码如下:

image

image

在页面中添加了一个button按钮,为button按钮写入监听事件。

Mycontentprovider:

新建一个provider:new->other->content Provider,自动生成方法:

只需要更改oncreate方法
点击查看代码
    public boolean onCreate() {
        Context context=getContext();
        MyDao myDao=new MyDao(context);
        return true;
    }

添加一个MyDBhelper的java文件,之前写过,直接复制过来,代码如下:

点击查看代码
public class MyDBhelper extends SQLiteOpenHelper {

    public MyDBhelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory,
                      int version) {
        super(context, "ZW", null, version);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table student(id Integer primary key autoincrement," +
                "name varchar(20),age Integer)");
        Log.d("ZW","onCreate is running");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

再新建一个java文件MyDao.java,在这里实现数据库的增删改查功能。代码如下:

点击查看代码
public class MyDao {
    private SQLiteDatabase database;
    private SQLiteOpenHelper myopenhelper;
    private Context context;

    private Uri uri=Uri.parse("content://zw.provider");

    public MyDao(Context context){
        this.context=context;
        myopenhelper=new MyDBhelper(context,"zw",null,1);
        database=myopenhelper.getReadableDatabase();

        database.execSQL("drop table if exists student");
        database.execSQL("create table student(id integer primary key autoincrement"+", name varchar(20), age integer)");
    }

    public Uri addvalue(Uri uri, ContentValues values){
        long rowID=database.insert("student",null,values);

        if(rowID == -1){
            Log.d("Dao","数据插入失败");
            return  null;
        }
        else {
            Uri insertUri= ContentUris.withAppendedId(uri,rowID);
            Log.d("zw","ContentUris:"+insertUri.toString());
            context.getContentResolver().notifyChange(insertUri,null);
            return insertUri;
        }
    }
}

#### 最后是mainactivity,只需要new一个Mydao对象即可
点击查看代码
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MyDao myDao=new MyDao(this);
    }

4.效果展示:

image

两个app同时在后台运行,点击两次按钮,在数据库中插入两条数据。

image

5.源码

resolver

posted @ 2022-11-23 18:38  .21  阅读(90)  评论(0)    收藏  举报