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》

原创粉丝点击