Android-ContentProvider内容提供者
来源:互联网 发布:matlab求解最优化问题 编辑:程序博客网 时间:2024/06/05 06:01
一、ContentProvider的概念
ContentProvider:为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据。Android已经为常见的一些数据提供了默认的ContentProvider
1、ContentProvider使用表的形式来组织数据
无论数据的来源是什么,ContentProvider都会认为是一种表,然后把数据组织成表格
2、ContentProvider提供的方法
query:查询
insert:插入
update:更新
delete:删除
getType:得到数据类型
onCreate:创建数据时调用的回调函数
3、每个ContentProvider都有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。Android所提供的ContentProvider都存放在android.provider包当中
二、ContentProvider的内部原理
自定义一个ContentProvider,来实现内部原理
步骤:
1、定义一个CONTENT_URI常量(里面的字符串必须是唯一)
Public static final Uri CONTENT_URI = Uri.parse(“content://com.example.sj_provider.data”);
如果有子表,URI为:
Public static final Uri CONTENT_URI = Uri.parse(“content://com.example.sj_provider.data/users”);
2、定义一个类,继承ContentProvider
Public class MyContentProvider extends ContentProvider
3、实现ContentProvider的所有方法(query、insert、update、delete、getType、onCreate)
二、ContentProvider的三要素
1.内容(数据)
2.名字(唯一的)
3.开放
下面小编实现了个查询的简单小列子
activity_main.xml
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="ID:" android:id="@+id/et_main_id" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="pname:" android:id="@+id/et_main_pname" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="page:" android:id="@+id/et_main_page" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="保存" android:onClick="save" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="查询" android:onClick="query" /> </LinearLayout> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@android:id/list" ></ListView>
item_listview.xml
<TextView android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/tv_item_listview_id" android:layout_weight="1" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/tv_item_listview_pnane" android:layout_weight="1" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/tv_item_listview_page" android:layout_weight="1" />
DbHelper.java
public class DbHelper extends SQLiteOpenHelper { public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); Log.i("test","DbHelper构造"); } /** * 创建表的操作 * @param sqLiteDatabase */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { Log.i("test","创建表"); sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,pname,page)"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { Log.i("test","onUpgrade"); }}
Mainactivity.java
public class MainActivity extends ListActivity { private EditText et_main_id; private EditText et_main_pname; private EditText et_main_page; private SQLiteDatabase db; private ListView listView; private Cursor cursor; private SimpleCursorAdapter simpleCursorAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //打乱集合中的数据// Collections.shuffle(); DbHelper dbHelper=new DbHelper(this,"questions.db",null,2); db = dbHelper.getReadableDatabase(); initViews(); cursor=getPersons(null);//查询到所有数据 //适配器 //ArrayAdapter SimpleAdapter(List<Map>) BaseAdapter //SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_listview,cursor,new String[]{"_id","pname","page"},new int[]{R.id.tv_item_listview_id,R.id.tv_item_listview_pnane,R.id.tv_item_listview_page}); //设置适配器 listView.setAdapter(simpleCursorAdapter); } private void initViews() { et_main_id = (EditText) findViewById(R.id.et_main_id); et_main_pname = (EditText) findViewById(R.id.et_main_pname); et_main_page = (EditText) findViewById(R.id.et_main_page); listView = getListView(); } public void save(View view){ //获取名字和年龄 String pname=et_main_pname.getText().toString(); String page=et_main_page.getText().toString(); ContentValues values=new ContentValues();//Map values.put("pname",pname); values.put("page",page); values.putNull("_id"); db.insert("person","pname",values); cursor=getPersons(null); //通知适配器数据发生改变 simpleCursorAdapter.changeCursor(cursor); } public void query(View view){ //判断ID是否为空 if(TextUtils.isEmpty(et_main_id.getText())){ //查询所有 cursor=getPersons(null); }else{ //查询单个 String id=et_main_id.getText().toString(); cursor=getPersons(id); } //通知适配器数据发生改变 simpleCursorAdapter.changeCursor(cursor); } /** * 从数据库中查询 * 1.查询所有 * 2.查询单个 */ public Cursor getPersons(String id){ if(TextUtils.isEmpty(id)){ //查询所有 //游标 cursor = db.query(false,"person",null,null,null,null,null,null,null); }else{ //查询单个 cursor = db.query(false,"person",null,"_id=?",new String[]{id},null,null,null,null); }// db.rawQuery() return cursor; }}
MyProvider.java
public class MyProvider extends ContentProvider { private DbHelper dbHelper; private SQLiteDatabase db; private UriMatcher uriMatcher; private Cursor c; @Override public boolean onCreate() { Log.i("test","onCreate"); dbHelper = new DbHelper(getContext(),"questions.db",null,2); db = dbHelper.getReadableDatabase(); //实例化URI匹配器 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //给匹配器中添加匹配规则 //查询所有 uriMatcher.addURI("com.example.sj_provider.data","persons",0); //查询单个 uriMatcher.addURI("com.example.sj_provider.data","persons/#",1); return false; } @Nullable @Override public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) { Log.i("test","query"); //开始匹配 int code=uriMatcher.match(uri); switch (code) { case 0: //查询所有 c = db.query(false,"person",strings,s,strings1,null,null,s1,null); return c; case 1: //得到#的值 long id=ContentUris.parseId(uri); //查询单个: c= db.query(false,"person",strings,"_id=?",new String[]{id+""},null,null,s1,null); return c; } return null; } @Nullable @Override public String getType(Uri uri) { return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues contentValues) { Log.i("test","insert"); return null; } @Override public int delete(Uri uri, String s, String[] strings) { Log.i("test","delete"); return 0; } @Override public int update(Uri uri, ContentValues contentValues, String s, String[] strings) { Log.i("test","update"); return 0; }}
AndroidManifest.xml
<provider android:authorities="com.example.sj_provider.data" android:name="com.example.sj_provider.MyProvider" android:exported="true" > </provider>
- Android ContentProvider(内容提供者)
- android内容提供者ContentProvider
- Android--- ContentProvider(内容提供者)
- Android 内容提供者ContentProvider
- Android内容提供者ContentProvider
- android内容提供者contentProvider
- android ContentProvider内容提供者
- Android-ContentProvider内容提供者
- Android ContentProvider 内容提供者
- android内容提供者ContentProvider
- Android ContentProvider内容提供者
- Android内容提供者ContentProvider
- android ContentProvider(内容提供者)基础
- Android 组件 ContentProvider 内容提供者
- android(15)(ContentProvider内容提供者)
- Android内容提供者ContentProvider总结
- Android内容提供者ContentProvider总结
- Android----ContentProvider(内容提供者) ContentResolver(内容访问者)
- js实现省份下拉菜单
- iOS开发中的https(一):基本概念
- 深度学习caffe:最优化方法
- C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- Spring@Autowired注解与自动装配
- Android-ContentProvider内容提供者
- Overload和Override的区别
- 图片链接,没什么用\(^o^)/
- Android CountDownTimer学习使用
- Android输入法弹出,布局上移,背景不会压缩
- threejs相机和渲染器
- 1047. Student List for Course (25)
- 使用Vue.js过程中,踩过的坑
- Java学习笔记