自定义一个自己的ContentProvider程序
2016-02-28 17:45
726 查看
package com.china.anonymous.contentproviderdemoone; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by Anonymous on 2016/1/31. */ public class MyHelper extends SQLiteOpenHelper { private static final String fileName = "demo.db"; private static final int version = 1; public MyHelper(Context context) { super(context, fileName,null, version); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { String sql = "create table student(_ID integer primary key autoincrement,name text not null)"; sqLiteDatabase.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
To create a new class which extends ContentProvider
package com.china.anonymous.contentproviderdemoone;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;import android.support.annotation.Nullable;public class MyContentProvider extends ContentProvider {private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);private static final int multiple_Items = 1;private static final int single_item = 2;private MyHelper helper = null;static {matcher.addURI("com.china.anonymous.contentproviderdemoone.MyContentProvider", "student", multiple_Items);matcher.addURI("com.china.anonymous.contentproviderdemoone.MyContentProvider", "student/#", single_item);}@Overridepublic boolean onCreate() {helper = new MyHelper(getContext());return false;}@Nullable@Overridepublic Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {//返回一个游标Cursor cursor = null;SQLiteDatabase db = helper.getReadableDatabase();int flag = matcher.match(uri);switch (flag) {case single_item:long id = ContentUris.parseId(uri);String where_id = "_ID=" + id;cursor = db.query("student", strings, where_id, strings1, null, null, null);case multiple_Items:cursor = db.query("student", strings, s, strings1, null, null, null);}return cursor;}@Nullable@Overridepublic String getType(Uri uri) {int flag = matcher.match(uri);switch (flag) {//查询单条记录,前面那一句固定写法case single_item:return "vnd.android.cursor.item/item";//查询整个表case multiple_Items:return "vnd.android.cursor.dir/items";default:throw new UnsupportedOperationException("not supported operation:" + uri);}}@Nullable@Overridepublic Uri insert(Uri uri, ContentValues contentValues) {//返回一个标志,判断是多条记录(从表中操作)还是单挑记录(操作指定记录)int flag = matcher.match(uri);SQLiteDatabase db = helper.getWritableDatabase();Uri newUri = null;//因为创建的表是自动添加的,所以就不用写单条记录的switch (flag) {case multiple_Items:long id = db.insert("student", null, contentValues);//把新添加的id加入表中newUri = ContentUris.withAppendedId(uri, id);}//返回一个新的urireturn newUri;}@Overridepublic int delete(Uri uri, String s, String[] strings) {//获取指定要删除的从uri中获取id,int flag = matcher.match(uri);SQLiteDatabase db = helper.getWritableDatabase();int deleteItem = 0;switch (flag) {case single_item://获取单挑的uri中的idlong id = ContentUris.parseId(uri);String where_id = "_ID=" + id;deleteItem = db.delete("student", where_id, strings);case multiple_Items:deleteItem = db.delete("student", s, strings);}return deleteItem;}@Overridepublic int update(Uri uri, ContentValues contentValues, String s, String[] strings) {//update主要是获取指定要修改的的uri的id,返回修改后的idint flag = matcher.match(uri);SQLiteDatabase db = helper.getWritableDatabase();int upDataItem = 0;switch (flag) {case single_item:long id = ContentUris.parseId(uri);String where_id = "_ID=" + id;upDataItem = db.update("student", contentValues, where_id, strings);case multiple_Items:upDataItem = db.update("student", contentValues, s, strings);}return upDataItem;}}
在AndroidManifest.xml中添加provider
<providerandroid:authorities="com.china.anonymous.contentproviderdemoone.MyContentProvider"android:name=".MyContentProvider"/>
在主程序中应用,用contentResolver
package com.china.anonymous.contentproviderdemoone;import android.content.ContentResolver;import android.content.ContentValues;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ContentResolver resolver = getContentResolver();Uri uri = Uri.parse("content://com.china.anonymous.contentproviderdemoone.MyContentProvider/student");ContentValues value = new ContentValues();value.put("name", "change");resolver.update(uri, value, "_ID=6", null);resolver.delete(uri, "_ID=9", null);}}来自为知笔记(Wiz)
相关文章推荐
- TabLayout与ViewPager和Fragment、FragmentPagerAdapter的合用
- TabLayout与ViewPager和Fragment、FragmentPagerAdapter的合用
- 自定义一个自己的ContentProvider程序
- omnetpp inet
- 排序算法:七大排序算法的PHP实现
- mac OS X中升级php5.5至php5.6 or php7
- PHP数组排序常用函数的区别一谈
- php基础复习(一)smarty模板
- 读《深入php面向对象、模式与实践》有感(一)
- 读《深入php面向对象、模式与实践》有感(一)
- ubuntu15.10 配置tftp
- 关于php线程安全的一些东西
- 使用php的curl根据关键词爬取百度搜索结果页
- FragmentPagerAdapter notifyDataSetChanged不起作用
- PHP获取用户访问IP地址的5种方法
- PHP界面显示中文乱码
- PHP 数据库操作 mysqli
- php使用explode分割字符串新手容易忽略的问题
- PHP中一些重要的函数总结
- matplotlib中画图显示中文,但保存为图片后中文乱码