1.创建Content Providers
package com.Aina.Android;import android.net.Uri;import android.provider.BaseColumns;/** * com.Aina.Android Pro_ContentProviders *  * @author Aina.huang E-mail: 674023920@qq.com * @version 创建时间:2010 Jul 1, 2010 11:26:31 AM 类说明 */public class NotePad {// Content Providers的URIpublic static final String AUTHORITY = "com.google.android.provider.notepad";private NotePad() {}/** * 定义基本字段 *  * @author Aina_hk *  */public static final class Notes implements BaseColumns {private Notes() {}public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY+ "/notes");// 新的MIME类型-多个public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.note";// 新的MIME类型-单个public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.note";// 默认排序public static final String DEFAULT_SORT_ORDER = "modified ASC";// 字段public static final String TITLE = "title";public static final String NOTE = "note";public static final String CREATEDDATE = "created";public static final String MODIFIEDDATE = "modified";}}


package com.Aina.Android;import java.util.HashMap;import com.Aina.Android.NotePad.Notes;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.Context;import android.content.UriMatcher;import android.content.res.Resources;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;import android.text.TextUtils;/** * com.Aina.Android Pro_ContentProviders *  * @author Aina.huang E-mail: 674023920@qq.com * @version 创建时间:2010 Jul 1, 2010 11:55:55 AM 类说明 */public class NotePadProvider extends ContentProvider {public static final String DATABASE_NAME = "test.db";public static final String TABLE_NAME = "notes";public static final int VERSION = 1;public static final int NOTES = 1;public static final int NOTE_ID = 2;public static HashMap<String, String> hm = null;public static UriMatcher mUriMatcher = null;public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME+ " (" + Notes._ID + " INTEGER PRIMARY KEY," + Notes.TITLE+ " TEXT," + Notes.NOTE + " TEXT," + Notes.CREATEDDATE+ " INTEGER," + Notes.MODIFIEDDATE + " INTEGER)";private SQLiteDataHelper msdh = null;static {mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);mUriMatcher.addURI(NotePad.AUTHORITY, "notes", NOTES);mUriMatcher.addURI(NotePad.AUTHORITY, "notes/#", NOTE_ID);hm = new HashMap<String, String>();hm.put(Notes._ID, Notes._ID);hm.put(Notes.TITLE, Notes.TITLE);hm.put(Notes.NOTE, Notes.NOTE);hm.put(Notes.CREATEDDATE, Notes.CREATEDDATE);hm.put(Notes.MODIFIEDDATE, Notes.MODIFIEDDATE);}private static class SQLiteDataHelper extends SQLiteOpenHelper {public SQLiteDataHelper(Context context, String name,CursorFactory factory, int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_TABLE);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);this.onCreate(db);}}/** * 删除 */@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {SQLiteDatabase db = msdh.getWritableDatabase();int num = 0;switch (mUriMatcher.match(uri)) {case NOTES:num = db.delete(TABLE_NAME, selection, selectionArgs);break;case NOTE_ID:num = db.delete(TABLE_NAME, Notes._ID+ " = "+ uri.getPathSegments().get(1)+ (!TextUtils.isEmpty(selection) ? " AND (" + selection+ ')' : ""), selectionArgs);break;default:break;}this.getContext().getContentResolver().notifyChange(uri, null);return num;}@Overridepublic String getType(Uri uri) {String str = "";switch (mUriMatcher.match(uri)) {case NOTES:str = Notes.CONTENT_TYPE;break;case NOTE_ID:str = Notes.CONTENT_ITEM_TYPE;break;default:throw new IllegalArgumentException("Unknown URI " + uri);}return str;}/** * 插入 */@Overridepublic Uri insert(Uri uri, ContentValues values) {if (mUriMatcher.match(uri) != NOTES) {throw new IllegalArgumentException("Unknown URI " + uri);}ContentValues cv = null;if (values == null) {cv = new ContentValues();} else {cv = new ContentValues(values);}long num = System.currentTimeMillis();if (cv.containsKey(Notes.CREATEDDATE) == false) {cv.put(Notes.CREATEDDATE, num);}if (cv.containsKey(Notes.MODIFIEDDATE) == false) {cv.put(Notes.MODIFIEDDATE, num);}if (cv.containsKey(Notes.TITLE) == false) {Resources r = Resources.getSystem();cv.put(Notes.TITLE, r.getString(android.R.string.untitled));}if (cv.containsKey(Notes.NOTE) == false) {cv.put(Notes.NOTE, "");}SQLiteDatabase db = msdh.getWritableDatabase();long id = db.insertOrThrow(TABLE_NAME, Notes.NOTE, cv);if (id > 0) {Uri uri_new = ContentUris.withAppendedId(uri, id);this.getContext().getContentResolver().notifyChange(uri_new, null);return uri_new;}return null;}@Overridepublic boolean onCreate() {msdh = new SQLiteDataHelper(this.getContext(), TABLE_NAME, null,VERSION);return true;}/** * 查询 */@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {SQLiteQueryBuilder qb = new SQLiteQueryBuilder();switch (mUriMatcher.match(uri)) {case NOTES:qb.setTables(TABLE_NAME);qb.setProjectionMap(hm);break;case NOTE_ID:qb.setTables(TABLE_NAME);qb.setProjectionMap(hm);qb.appendWhere(Notes._ID + " = " + uri.getPathSegments().get(1));break;default:throw new IllegalArgumentException("Unknown URI " + uri);}String orderBy = "";if (TextUtils.isEmpty(sortOrder)) {orderBy = Notes.DEFAULT_SORT_ORDER;} else {orderBy = sortOrder;}SQLiteDatabase db = msdh.getReadableDatabase();Cursor cursor = qb.query(db, projection, selection, selectionArgs,null, null, orderBy);cursor.setNotificationUri(this.getContext().getContentResolver(), uri);return cursor;}/** * 更新 */@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {SQLiteDatabase db = msdh.getWritableDatabase();int num = 0;switch (mUriMatcher.match(uri)) {case NOTES:num = db.update(TABLE_NAME, values, selection, selectionArgs);break;case NOTE_ID:num = db.update(TABLE_NAME, values, Notes._ID+ " = "+ uri.getPathSegments().get(1)+ (!TextUtils.isEmpty(selection) ? " and (" + selection+ ")" : ""), selectionArgs);default:break;}this.getContext().getContentResolver().notifyChange(uri, null);return num;}}


package com.Aina.Android;import com.Aina.Android.NotePad.Notes;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.os.Bundle;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.Toast;public class Test extends Activity {/** Called when the activity is first created. */ListView lv = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);lv = (ListView) this.findViewById(R.id.ListView01);ContentValues cv = new ContentValues();cv.put(Notes.TITLE, "title1");cv.put(Notes.NOTE, "note1");this.getContentResolver().insert(Notes.CONTENT_URI, cv);cv.clear();cv.put(Notes.TITLE, "title2");cv.put(Notes.NOTE, "note2");this.getContentResolver().insert(Notes.CONTENT_URI, cv);this.displayNote();}private void displayNote() {String[] columns = new String[] { Notes._ID, Notes.TITLE, Notes.NOTE,Notes.CREATEDDATE, Notes.MODIFIEDDATE };Cursor c = this.managedQuery(Notes.CONTENT_URI, columns, null, null,null);this.startManagingCursor(c);if (c != null) {int cs = 0;if(c.isBeforeFirst()){cs++;this.setTitle("isBeforeFirst"+cs);}if(c.moveToFirst()){cs++;this.setTitle("moveToFirst"+cs);}if(c.isFirst()){cs++;this.setTitle("isFirst"+cs);}ListAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2, c, new String[] {Notes._ID, Notes.TITLE }, new int[] {android.R.id.text1, android.R.id.text2 });lv.setAdapter(adapter);/* * if (c.moveToFirst()) { this.setTitle(c.getCount()+""); String id = * ""; String title = ""; do { id = * c.getString(c.getColumnIndex(Notes._ID)); title = * c.getString(c.getColumnIndex(Notes.TITLE)); Toast toast = * Toast.makeText(this, c.getPosition()+"|ID:" + id + "|title:" + * title, Toast.LENGTH_LONG); toast.show(); } while * (c.moveToNext()); *  } */}}}


<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.Aina.Android" android:versionCode="1"android:versionName="1.0"><application android:icon="@drawable/icon"android:label="@string/app_name"><provider android:name=".NotePadProvider"android:readPermission="android.permission.READ_CALENDAR"android:writePermission="android.permission.WRITE_CALENDAR"android:authorities="com.google.android.provider.notepad" /><activity android:name=".Test"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><categoryandroid:name="android.intent.category.LAUNCHER" /></intent-filter><intent-filter><dataandroid:mimeType="vnd.android.cursor.dir/vnd.google.note"></data></intent-filter><intent-filter><dataandroid:mimeType="vnd.android.cursor.item/vnd.google.note"></data></intent-filter></activity></application> </manifest>


2.通过ContentResolver来操作数据

package com.gn.provide;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.SimpleCursorAdapter;public class Tess extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);String uri = "content://com.google.android.provider.notepad/xixi";String[] columns = new String[] { "_id", "title", "note" };try {/*添加数据ContentValues cv = new ContentValues();cv.put("title", "new title");cv.put("note", "new note");this.getContentResolver().insert(Uri.parse(uri), cv);*//*删除数据int num = this.getContentResolver().delete(Uri.parse(uri), "title='new title'", null);*//*修改ContentValues cv = new ContentValues();cv.put("title", "old title");cv.put("note", "old note");long num = this.getContentResolver().update(Uri.parse(uri), cv, "_id=3", null);this.setTitle("num="+num);*/Cursor c = this.managedQuery(Uri.parse(uri), null, null, null, null);// Cursor c = this.getContentResolver().query(Uri.parse(uri),// columns,// null, null, null);if (c == null) {this.setTitle("c=null");} else {this.startManagingCursor(c);ListView lv = (ListView) this.findViewById(R.id.ListView01);ListAdapter adapter = new SimpleCursorAdapter(this,R.layout.simple, c, columns, new int[] { R.id.ID,R.id.title, R.id.note });lv.setAdapter(adapter);}} catch (Exception ex) {ex.printStackTrace();}}}


<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.gn.provide"      android:versionCode="1"      android:versionName="1.0">      <uses-permission android:name="android.permission.READ_CALENDAR"></uses-permission>      <uses-permission android:name="android.permission.WRITE_CALENDAR"></uses-permission>    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".Tess"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest> 

更多相关文章

  1. android 网络图片与网页读取
  2. Android(安卓)通过findViewById方式创建TabHost
  3. Android(安卓)File 数据存储
  4. Android创建快捷方式(shortcut)
  5. Android(安卓)Q AppCompactor and LowMemDetector
  6. Android(安卓)深入研究SQLite实例(二)
  7. Android(安卓)sqlite3 数据库批量操作
  8. android inputreader 部分对event数据的处理
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. Android(安卓)沉浸式模式与常见状态栏和
  2. MAC Android(安卓)Studio编写Android(安
  3. 理解Android(安卓)Java垃圾回收机制
  4. Android获取手机WiFi IP地址,MAC地址和网
  5. 超详细的Android系统50大必备秘籍分享
  6. Android(安卓)apk安装过程及Java、JNI读
  7. 第七章 ARM 反汇编基础(三)(ARM 原生程序的
  8. VirtualAPK:滴滴 Android(安卓)插件化的实
  9. uniapp解决多条socket连接冲突问题
  10. Android(安卓)Coding 利器 之 掌握小技巧