ContentProvider的创建和ContentResolver的使用
来源:互联网 发布:网络订餐平台乱象 编辑:程序博客网 时间:2024/05/18 15:57
1、创建contentProvider
定义(客户端调用时需知的内容)接口
package com.gogler.content;import android.net.Uri;import android.provider.BaseColumns;public class Users {public static final String AUTHORITY = "com.gogler.content";public static final class User implements BaseColumns{public static final Uri CONTENT_URI = Uri.parse("content://com.gogler.content"); public static final String USER_NAME = "USER_NAME"; }}
实现内容提供器
package com.gogler.content;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteQueryBuilder;import android.net.Uri;public class SumaryContentProvider extends ContentProvider {private SQLiteDatabase sqlDB;private DatabaseHelper dbHelper;private static final String DATABASE_NAME = "Users.db";private static final int DATABASE_VERSION = 1;private static final String TABLE_NAME = "User";private static final String TAG = "SumaryContentProvider";private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { //创建用于存储数据的表 db.execSQL("Create table " + TABLE_NAME + "( _id INTEGER PRIMARY KEY AUTOINCREMENT, " + "USER_NAME TEXT);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); }}@Overridepublic int delete(Uri uri, String s, String[] as) { return 0;}@Overridepublic String getType(Uri uri) { return null;}@Overridepublic Uri insert(Uri uri, ContentValues contentvalues) { sqlDB = dbHelper.getWritableDatabase(); long rowId = sqlDB.insert(TABLE_NAME, "", contentvalues); if (rowId > 0) { Uri rowUri = ContentUris.appendId(Users.User.CONTENT_URI.buildUpon(), rowId).build(); getContext().getContentResolver().notifyChange(rowUri, null); return rowUri; } throw new SQLException("Failed to insert row into " + uri);}@Overridepublic boolean onCreate() { dbHelper = new DatabaseHelper(getContext()); return (dbHelper == null) ? false : true;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); SQLiteDatabase db = dbHelper.getReadableDatabase(); qb.setTables(TABLE_NAME); Cursor c = qb.query(db, projection, selection, null, null, null, sortOrder); c.setNotificationUri(getContext().getContentResolver(), uri); return c;}@Overridepublic int update(Uri uri, ContentValues contentvalues, String s, String[] as) { return 0;}}
2、使用内容提供器ContentResolver(客户端)
package com.gogler.content;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.widget.Toast;public class ContentSumaryActivity extends Activity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); for(int i =1; i<=10; i++){ insertRecord("User"+i); } displayRecords(); } private void insertRecord(String userName) { ContentValues values = new ContentValues(); values.put(Users.User.USER_NAME, userName); getContentResolver().insert(Users.User.CONTENT_URI, values); } private void displayRecords() { String columns[] = new String[] { Users.User._ID, Users.User.USER_NAME }; Uri myUri = Users.User.CONTENT_URI; Cursor cur = managedQuery(myUri, columns,null, null, null ); if (cur.moveToFirst()) { String id = null; String userName = null; do { id = cur.getString(cur.getColumnIndex(Users.User._ID)); userName = cur.getString(cur.getColumnIndex(Users.User.USER_NAME)); Toast.makeText(this, id + " " + userName, Toast.LENGTH_LONG).show(); } while (cur.moveToNext()); } }}
3、参考
《Android基础 : Android Content Provider》
- ContentProvider的创建和ContentResolver的使用
- ContentProvider和ContentResolver的使用
- Android ContentProvider、ContentResolver和ContentObserver的使用
- ContentResolver和ContentProvider的关系
- ContentProvider和ContentResolver的混用
- ContentProvider和ContentResolver的学习
- 简单的Contentprovider和contentResolver
- 使用ContentProvider和ContentResolver实现应用程序间的数据共享
- 关于contentProvider和ContentResolver的个人理解
- ContentProvider的创建和使用
- ContentProvider, ContentResolver,Sqlite的关系
- 传智播客--ContentProvider共享数据和ContentResolver的使用,Uri,UriMatcher和ContentUris
- ContentProvider共享数据和ContentResolver的使用,Uri,UriMatcher和ContentUris
- 传智播客--ContentProvider共享数据和ContentResolver的使用,Uri,UriMatcher和ContentUris
- Android开发之ContentProvider与ContentResolver的使用
- 内容提供者ContentProvider与内容接受者ContentResolver的使用详解
- Android中Uri和ContentProvider以及ContentResolver之间的联系
- 跨应用数据提供的解决:ContentProvider和ContentResolver
- ExtJs GridPanel动态列完整版
- cookie的修改
- 小议iphone内存管理与属性
- boost::regex学习
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
- ContentProvider的创建和ContentResolver的使用
- Android 网上的重要知识点
- 打印杨辉三角的shell脚本
- 我的C/C++之路-008课(打印一些图形)
- Java的Main方法与Java进程之间的关系
- 用ultraEdit打造自己的Objective-C IDE for Windows
- ZOJ1067Color Me Less
- 对xib/nib, file's owner, first responder的理解
- c primer Plus第八章笔记