自定义ContentProvider内容提供者
来源:互联网 发布:电脑网络账号密码忘记 编辑:程序博客网 时间:2024/06/05 11:56
一、自定义的内容提供者
1. 继承 ContentProvider
2. 实现 增 删 改 查 方法 以及 onCreate 方法
3. 制定 Uri 的网址规则,形成特定的功能
4. 四大组件都需要在清单文件注册,来确认内容提供者是否可以被 其他程序访问
5. 内部需要进行数据的操作,增 删 改 查
5.1 确认使用哪种数据类型:SQLite, File, SharedPreferences
5.2 onCreate 方法,需要初始化 通常 DbHelper
5.3 每一个操作的方法,第一个参数都代表了 需要操作的哪一张表。通过Uri来标示;
5.4 使用 UriMatcher 类对象,来进行网址匹配,判断访问那个表
关于 Uri 与 authorities 说明
Uri 就是一个网址
规则: content://<authority>/path
authority 代表的就是 Android 系统中内容提供者的唯一标示,就像服务器的IP地址
清单文件里面声明内容提供者的authority
http://www.baidu.com/images
2.创建数据库
1. 继承 ContentProvider
2. 实现 增 删 改 查 方法 以及 onCreate 方法
3. 制定 Uri 的网址规则,形成特定的功能
4. 四大组件都需要在清单文件注册,来确认内容提供者是否可以被 其他程序访问
5. 内部需要进行数据的操作,增 删 改 查
5.1 确认使用哪种数据类型:SQLite, File, SharedPreferences
5.2 onCreate 方法,需要初始化 通常 DbHelper
5.3 每一个操作的方法,第一个参数都代表了 需要操作的哪一张表。通过Uri来标示;
5.4 使用 UriMatcher 类对象,来进行网址匹配,判断访问那个表
关于 Uri 与 authorities 说明
Uri 就是一个网址
规则: content://<authority>/path
authority 代表的就是 Android 系统中内容提供者的唯一标示,就像服务器的IP地址
清单文件里面声明内容提供者的authority
http://www.baidu.com/images
http://www.baidu.com/news
二、创建自定义内容提供者
public class MyProvider extends ContentProvider { private MyDbHelper mMyDbHelper; public static final int CODES_CODE = 1; public static final UriMatcher uriMatcher; static { uriMatcher = new UriMatcher(0); uriMatcher.addURI("*","codes",CODES_CODE); } public MyProvider() { } @Override public boolean onCreate() { mMyDbHelper = new MyDbHelper(getContext()); return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor ret = null; SQLiteDatabase database = mMyDbHelper.getWritableDatabase(); int code = uriMatcher.match(uri); switch (code) { case CODES_CODE: ret = database.query("codes",projection,selection,selectionArgs,null,null,sortOrder); break; } return ret; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { int index = 0; SQLiteDatabase database = mMyDbHelper.getWritableDatabase(); int code = uriMatcher.match(uri); switch (code) { case CODES_CODE: index = database.delete("codes",selection,selectionArgs); break; } database.close(); return index; } @Override public String getType(Uri uri) { // TODO: Implement this to handle requests for the MIME type of the data // at the given URI. throw new UnsupportedOperationException("Not yet implemented"); } @Override public Uri insert(Uri uri, ContentValues values) { Uri ret = null; SQLiteDatabase database = mMyDbHelper.getWritableDatabase(); int codes = uriMatcher.match(uri); switch (codes) { case CODES_CODE: long index = database.insert("codes", null, values); ret = ContentUris.withAppendedId(uri,index); break; } database.close(); return ret; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int index = 0; SQLiteDatabase database = mMyDbHelper.getWritableDatabase(); int code = uriMatcher.match(uri); switch (code) { case CODES_CODE: index = database.update("codes", values, selection, selectionArgs); break; } database.close(); return index; }}
2.创建数据库
MyDbHelper.java
public class MyDbHelper extends SQLiteOpenHelper { public static final String CODE_MANGER ="create table codes (" + "_id integer primary key autoincrement," + "title varchar," + "webView varchar," + "user varchar," + "pass varchar," + "remark long," + "update_t long)"; public MyDbHelper(Context context){ super(context,"manger",null,1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CODE_MANGER); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //db.execSQL("alter table income add column type integer default 0"); if (newVersion ==2){ db.execSQL("alter table codes add column update_t long default 0"); } }}
3.Activity调用数据库的数据
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemLongClickListener, AdapterView.OnItemClickListener { private TextView mTitle; private TextView mUser; private SimpleCursorAdapter mAdapter; private ListView mListView; private Cursor cursor; private SQLiteDatabase mDatabase; private ContentResolver mResolver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// MyDbHelper helper = new MyDbHelper(this);// mDatabase = helper.getWritableDatabase(); mTitle = (TextView) findViewById(R.id.db_title); mUser = (TextView) findViewById(R.id.db_username); mResolver = getContentResolver(); Uri uri = Uri.parse("content://abc/codes"); cursor = mResolver.query(uri, null, null, null, "remark desc"); if (cursor != null){ mAdapter = new SimpleCursorAdapter(this, R.layout.db_item,cursor, new String[]{"title","user"}, new int[]{R.id.db_title,R.id.db_username}, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); mListView = (ListView) findViewById(R.id.main_list); RequeryData(); mListView.setAdapter(mAdapter); mListView.setOnItemLongClickListener(this); mListView.setOnItemClickListener(this); } }// @Override// protected void onStart() {// super.onStart();// RequeryData();// } @Override protected void onResume() { super.onResume(); RequeryData(); } private void RequeryData() { Uri uri = Uri.parse("content://abc/codes"); cursor = mResolver.query(uri, null, null, null, "remark desc"); mAdapter.changeCursor(cursor); //mAdapter.notifyDataSetChanged(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_item,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_edit: Toast.makeText(MainActivity.this, "edit被点击", Toast.LENGTH_SHORT).show(); int id = cursor.getColumnIndex("_id"); break; case R.id.action_add: Toast.makeText(MainActivity.this, "add被点击了", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(this, EditActivity.class); startActivity(intent); break; } return true; } @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(this,EditActivity.class); intent.putExtra("_id",id); startActivity(intent); return true; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(this, InfoActivity.class); intent.putExtra("_id", id); startActivity(intent); }}
0 0
- contentprovider 自定义内容提供者
- 自定义ContentProvider内容提供者
- ContentProvider(内容提供者)以及自定义ContentProvider
- 25.ContentProvider自定义内容提供者与ContentResolver内容访问者
- ContentProvider内容提供者
- Android ContentProvider(内容提供者)
- ContentProvider 内容提供者
- ContentProvider内容提供者(一)
- ContentProvider内容提供者(二)
- ContentProvider 内容提供者
- android内容提供者ContentProvider
- Android--- ContentProvider(内容提供者)
- ContentProvider内容提供者
- ContentProvider(内容提供者)
- ContentProvider(内容提供者)
- ContentProvider内容提供者
- ContentProvider 内容提供者
- ContentProvider 内容提供者
- Mybatis对Oracle批量插入的配置
- Android中动态加载dex技术初探(插件化技术学习)
- Spring的IOC和AOP
- 190. Reverse Bits*
- 带你读开源—ASP.NET_MVC(十)
- 自定义ContentProvider内容提供者
- SpringMVC简单整合Hibernate
- 远程相关
- (控制)把SIMULINK转成C语言并在VS中调用
- 二叉树非递归后序遍历算法
- 解决360浏览器兼容性问题的极速模式、兼容模式、IE11模式对同一页面的不同兼容性问题
- 实现请求重定向
- bzoj1606(背包)
- hdu2639 bone collector II 01背包第k优解 TWT Tokyo Olympic 1COMBO-1