ContentProvider 是android 里面重要组件之一 ,关于自定义ContentProvider 代码 以提供一个学生类的数据表为例

package com.content.provider;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.os.Bundle;import android.view.View;import android.widget.TextView;public class MainActivity extends Activity {//private static final String     @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    }        public void query(View view){    Cursor cursor=getContentResolver().query(Student.CONTENT_URI, null, null, null,null);    String data="";    if(cursor.moveToFirst()){    data+="id"+cursor.getInt(0)+"name"+cursor.getString(1);    }    while(cursor.moveToNext()){    data+="id"+cursor.getInt(0)+"name"+cursor.getString(1);    }    cursor.close();    setTitle("查询成功!");    ((TextView)findViewById(R.id.textView1)).setText(data);    }        public void insert(View view){    ContentValues values=new ContentValues();    values.put("NAME", "123444");getContentResolver().insert(Student.CONTENT_URI, values);    setTitle("插入成功!");    }        public void update(View view){    ContentValues values=new ContentValues();    values.put("name", "456");    String where="id=?";String[] selectionArgs=new String []{"1"};getContentResolver().update(Student.CONTENT_URI, values, where, selectionArgs);setTitle("更新成功!");    }        public void delete(View view){    String where="id=?";String[] selectionArgs=new String []{"1"};getContentResolver().delete(Student.CONTENT_URI, where, selectionArgs);setTitle("删除成功!");    }}

package com.content.provider;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.Context;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteQueryBuilder;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.net.Uri;public class StudentContentProvider extends ContentProvider {private SQLiteDatabase mDatabase;private StudentDataBaseHelper mHelper;private static final String DB_NAME = "student.db";private static Context mContext;private static int DB_VERSION = 1;private static final UriMatcher M_URI_MATCHER;private SQLiteQueryBuilder mLiteQueryBuilder = new SQLiteQueryBuilder();static {M_URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);M_URI_MATCHER.addURI(Student.AUTHORITY, Student.TB_NAME,Student.STUDENT);M_URI_MATCHER.addURI(Student.AUTHORITY, Student.TB_NAME + "/#",Student.STUDENT_ITEM);}@Overridepublic int delete(Uri uri, String arg1, String[] arg2) {mDatabase=mHelper.getWritableDatabase();int row=mDatabase.delete(Student.TB_NAME, arg1, arg2);mContext.getContentResolver().notifyChange(uri, null);return  row;}@Overridepublic String getType(Uri uri) {int math = M_URI_MATCHER.match(uri);switch (math) {case Student.STUDENT:return Student.STUDENT_TYPE;case Student.STUDENT_ITEM:return Student.STUDENT_ITEM_TYPE;}return null;}@Overridepublic Uri insert(Uri uri, ContentValues values) {mDatabase = mHelper.getWritableDatabase();String tableName = uri.getPathSegments().get(0);if (tableName == null)throw new IllegalArgumentException();if (null != values) {long rowId = mDatabase.insert(Student.TB_NAME, null, values);if (0 < rowId) {Uri newUri = ContentUris.withAppendedId(uri, rowId);mContext.getContentResolver().notifyChange(uri, null);return newUri;}}return null;}@Overridepublic boolean onCreate() {mHelper = new StudentDataBaseHelper(getContext());mHelper.close();return true;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {mDatabase = mHelper.getReadableDatabase();String tableName = uri.getPathSegments().get(0);if (tableName == null)throw new IllegalArgumentException();Cursor c = mDatabase.query(Student.TB_NAME, new String[] {}, selection,selectionArgs, null, null, sortOrder);c.setNotificationUri(mContext.getContentResolver(), uri);return c;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {mDatabase = mHelper.getWritableDatabase();String tableName = uri.getPathSegments().get(0);if (tableName == null)throw new IllegalArgumentException();mLiteQueryBuilder.setTables(Student.TB_NAME);mLiteQueryBuilder.appendWhere("_id=" + uri.getLastPathSegment());int row=mDatabase.update(Student.TB_NAME, values, selection,selectionArgs);mContext.getContentResolver().notifyChange(uri, null);return row;}private static class StudentDataBaseHelper extends SQLiteOpenHelper {public StudentDataBaseHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);mContext = context;}public StudentDataBaseHelper(Context context, String name,CursorFactory factory, int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("CREATE TABLE STUDENT (" + "ID"+ " INTEGER PRIMARY KEY AUTOINCREMENT," + "NAME "+ "TEXT);");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("DROP TABLE IF EXISTS STUDENT");onCreate(db);}}@Overrideprotected void finalize() throws Throwable {if(null!=mDatabase) mDatabase.close();super.finalize();}}

package com.content.provider;import android.net.Uri;import android.provider.BaseColumns;public class Student implements BaseColumns{public static final String TB_NAME="Student";//表名public static final String AUTHORITY="com.content.provider.studentcontentprovider";//数据提供者的路径public static final Uri CONTENT_URI=Uri.parse("content://"+AUTHORITY+"/"+TB_NAME);//访问学生类的URIpublic static final String STUDENT_TYPE="vnd.android.cursor.dir/vnd.aspire.student";// 学生表的数据类型public static final String STUDENT_ITEM_TYPE="vnd.android.cursor.item/vnd.aspire.student";//学生表里的一条数据的类型public static final int STUDENT=1;//所有数据 类型常量public static final int STUDENT_ITEM=2;//一条数据的类型常量}

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.content.provider"      android:versionCode="1"      android:versionName="1.0">    <uses-sdk android:minSdkVersion="4" />    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".MainActivity"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity><provider android:name=".StudentContentProvider" android:authorities="com.content.provider.studentcontentprovider"></provider>    </application></manifest>

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. android连接mysql数据库
  4. android中ListView介绍
  5. 我的Android成长之路(11)----Android之SharedPreferences用法详解
  6. Web后台和Android前端之间的网络通信
  7. Android(安卓)Bundle类---activity之间通信
  8. Android(安卓)studio 使用AIDL 无法import class问题解决
  9. Android(安卓)读取网络数据

随机推荐

  1. Android实现多条Toast快速显示(强制中止上
  2. 白底黑字!Android浅色状态栏黑色字体模式
  3. Android(安卓)圆角圆形ImageView(超简单
  4. 转载 解决在PC上无法连接adb interface的
  5. uni-app打包程序 Hbuilder X 用自有证书
  6. Android(安卓)任务栈与启动模式
  7. android调用相应的应用市场进行评价功能
  8. Android中的绘制机制
  9. Android(安卓)SurfaceFlinger VSync流程
  10. Android中 token 的使用