android content provider
16lz
2021-12-04
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>
更多相关文章
- mybatisplus的坑 insert标签insert into select无参数问题的解决
- python起点网月票榜字体反爬案例
- android连接mysql数据库
- android中ListView介绍
- 我的Android成长之路(11)----Android之SharedPreferences用法详解
- Web后台和Android前端之间的网络通信
- Android(安卓)Bundle类---activity之间通信
- Android(安卓)studio 使用AIDL 无法import class问题解决
- Android(安卓)读取网络数据