ContentProvider(内容提供者)和ContentResolve(内容访问者)

来源:互联网 发布:如何优化网页加载速度 编辑:程序博客网 时间:2024/05/16 09:03

   ContentProvder(内容提供者是安卓四大组件之一):为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据。Android已经为常见的一些数据提供了默认的ContentProvider
1、ContentProvider使用表的形式来组织数据
无论数据的来源是什么,ContentProvider都会认为是一种表,然后把数据组织成表格
2、ContentProvider提供的方法
   query:查询
   insert:插入
   update:更新
   delete:删除
   getType:得到数据类型
   onCreate:创建数据时调用的回调函数
3、每个ContentProvider都有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。Android所提供的ContentProvider都存放在android.provider包当中


下面说下我写的
1.首先是ContentProvider(内容提供者)的主界面:

外面是用的LinearLayout布局

 <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/et_main_id"        android:hint="ID:"        />    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/et_main_name"        android:hint="Name:"        />    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/et_main_age"        android:hint="age:"        />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="保存"        android:onClick="save"        />

2.写一个DbHelper(继承SQLiteOpenHelper)连接数据库并重新建一个表 重写3个方法:

public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {        super(context, name, factory, version);        Log.i("test","构造");    }    @Override    //创建数据时调用的回调函数    public void onCreate(SQLiteDatabase sqLiteDatabase) {        //操作:创建表的操作        Log.i("test","创建表");        sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)");    }    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {        Log.i("test","数据库版本,低--->高");    }

3.写了一个类继承ContentProvider
写出ContentProvider提供的6个方法
因为我只写了一个查询数据:

 private static final int PERSONS=1;    private static final int PERSON=2;    @Override    public boolean onCreate() {        DbHelper dbHelper=new DbHelper(getContext(),"G150831.db",null,2);        sqLiteDatabase = dbHelper.getReadableDatabase();        //实例化URI匹配器        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);        //添加匹配规则        //      content://com.zking.g150831_android16_sqlite.data/datas代表查询所有        //      content://com.zking.g150831_android16_sqlite.data/datas/1代表查询单个uriMatcher.addURI("com.zking.g150831_android16_sqlite.person","persons",MyProvider.PERSONS);        uriMatcher.addURI("com.zking.g150831_android16_sqlite.person","persons/#",MyProvider.PERSON);        Log.i("text","onCreate");        return false;    }    @Nullable    @Override    //查询    public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {        //查询所有的数据        Log.i("text","query");         int code=uriMatcher.match(uri);        switch (code) {            case MyProvider.PERSONS:                Log.i("text","query查询所有");                return sqLiteDatabase.query(true,"person",strings,s,strings1,null,null,s1,null);            case MyProvider.PERSON:                Log.i("text","query查询单个");                //获取#好的值               long id= ContentUris.parseId(uri);                return  sqLiteDatabase.rawQuery("select * from person where _id=?",new String[]{id+""});        }            return null;那几个方法我就不写上去了

4.在androidMainfest.xml 清单文件中去配置这个MyProvider

  <provider   android:authorities="com.zking.g150831_android16_sqlite.person"            android:name="com.zking.provider.MyProvider"            android:exported="true"            ></provider>

5.在MainActivity这个类中写了一个方法:

 public void save(View view){        String name=et_main_name.getText().toString();        String age=et_main_age.getText().toString();        //存到数据库//        ContentValues values=new ContentValues();//Map//        values.put("name",name);//        values.put("age",age);//        values.putNull("_id");//        database.insert("person","name",values);        //HQL QBC 纯(原)        for (int i = 0; i <20 ; i++) {        //根据你写入的数据循环20次            database.execSQL("insert into person values(null,?,?)",new String[]{name+i,age});        }        Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();    }

ContentResolve(内容访问者)

1.主界面:

    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/et_main"        />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="获取数据"        android:onClick="getdata"        />

2.MainActivity写了个判断EditText有没有数据在查询:

 @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取内容访问者        cr = getContentResolver();        et_main = (EditText) findViewById(R.id.et_main);    }    public void getdata(View view){       if (TextUtils.isEmpty(et_main.getText())){           //如果查询为空就查所有           uri = Uri.parse("content://com.zking.g150831_android16_sqlite.person/persons");       }        else {           //否则查询单个           String id=et_main.getText().toString();           uri = Uri.parse("content://com.zking.g150831_android16_sqlite.person/persons/"+id);       }        //        Cursor cursor= cr.query(uri,null,null,null,null);        //单个查询        //01.条件查询_id=3        //02.网页查询?id=4        //03.URI匹配器        //SimpleCursorAdaper        while (cursor.moveToNext()){            int id=cursor.getInt(cursor.getColumnIndex("_id"));            String name=cursor.getString(cursor.getColumnIndex("name"));            int age=cursor.getInt(cursor.getColumnIndex("age"));            Log.i("text","_"+id+"_"+name+"_"+age);        }    }
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 考驾照一直不过怎么办 驾照2年没考出来怎么办 驾考体检色盲怎么办 杭州居住告知单怎么办 郑州有房怎么办暂住证 郑州买车怎么办暂住证 在青岛办暂住证怎么办 异地买车暂住证怎么办 广州暂住证过期了怎么办 杭州暂住证过期了怎么办 居住卡到期了怎么办 居住卡过期了怎么办 在合肥办暂住证怎么办 在西安办暂住证怎么办 杭州没办暂住证怎么办 暂住证超过2月怎么办 机动车大本丢了怎么办 北京老年卡2018怎么办 暂住卡过期了怎么办 我暂住证过期了怎么办 我没租房怎么办暂住证 孩子异地入学籍怎么办 孩子入不了学籍怎么办 常州没有暂住证怎么办牌照 东莞居住证过期了怎么办 杭州告知单过期怎么办 杭州暂住证到期了怎么办 在杭州租房怎么办暂住证 杭州暂住证丢了怎么办 在宾馆住怎么办暂住证 上海学车暂住证怎么办 环保车贴丢了怎么办 交通事故交警不处理怎么办 哈尔滨冰雪大世界夏天怎么办 下围棋没天赋怎么办 围棋计算力不好怎么办? 围棋3段后怎么办 遇到围棋中的断怎么办 手机出现等待中怎么办 小孩和同学打架怎么办 听到同学议论我怎么办