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); } }
- ContentProvider(内容提供者)和ContentResolve(内容访问者)
- ContentProvider(内容提供者)和ContentResolve(内容访问者)
- ContentProvider内容提供者 和 ContentResolver内容访问者
- ContentProvider内容提供者和ContentResolver内容访问者
- ContentProvider内容提供者和ContentResolver内容访问者
- ContentProvider内容提供者和ContentResolver内容访问者
- ContentResolve内容访问者(访问系统)
- Android ContentProvider(内容提供者 )+ContentResolver(内容访问者)
- ContentProvider(内容提供者)与ContentResolver(内容访问者)
- ContentProvider(内容提供者)
- ContentProvider(内容提供者)
- Android 中ContentProvider内容提供者和ContentResolver内容访问者
- Android:内容提供者(ContentProvider)和内容访问者(ContentResolver)
- ContentProvider内容提供者与ContentResolver内容访问者
- Android----ContentProvider(内容提供者) ContentResolver(内容访问者)
- ContentProvider内容提供者与ContentResolver内容访问者
- ContentProvider内容提供者与ContentResolver内容访问者
- 内容提供者(ContentProvider)复习
- 托马斯微积分是数学守旧派的代表作
- Java多线程——守护线程
- 仿淘宝幻灯片上下滑动效果
- SQL SERVER——索引的重要性
- JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代
- ContentProvider(内容提供者)和ContentResolve(内容访问者)
- pay attention to \r \n
- test
- 【寒江雪】2017.2.15切题
- Leetcode 92. Reverse Linked List II
- 54. Spiral Matrix
- 内容提供访问者
- spring安全框架系列springSecurity
- CSS属性之文本(Text)属性 常用14个