zoukankan      html  css  js  c++  java
  • Android开发——数据存储之ContentProvider(2)

    ----------------接上文---------------------

    2、创建自定义ContentProvider
    创建内容供应器,需要继承ContentProvider
     
    示例代码三:
       1:  
       2: /**
       3:  * 内容提供者
       4:  * @author 张汉国
       5:  */
       6: public class TodoListProvider extends ContentProvider {
       7:  
       8:     private static final String TAG = TodoListProvider.class.getSimpleName();
       9:  
      10:     //数据库名
      11:     private static final String DATABASE_NAME = "todolist.db";
      12:     //版本
      13:     private static final int DATABASE_VERSION = 1;
      14:     //表名
      15:     private static final String TABLE_NAME = "todos";
      16:     //属性表
      17:     private static HashMap<String, String> sTodosProjectionMap;
      18:  
      19:     private static final int TODOS = 1;
      20:     private static final int TODO_ID = 2;
      21:  
      22:     //uri匹配器
      23:     private static final UriMatcher uriMatcher;
      24:  
      25:     private DataBaseHelper dataBaseHelper;
      26:  
      27:     static {
      28:         //数据初始化
      29:         uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
      30:         uriMatcher.addURI(TodoList.AUTHORITY, "todos", TODOS);
      31:         uriMatcher.addURI(TodoList.AUTHORITY, "todos/#", TODO_ID);
      32:  
      33:         sTodosProjectionMap = new HashMap<String, String>();
      34:         sTodosProjectionMap.put(Todo._ID, Todo._ID);
      35:         sTodosProjectionMap.put(Todo.TITLE, Todo.TITLE);
      36:         sTodosProjectionMap.put(Todo.CONTENT, Todo.CONTENT);
      37:         sTodosProjectionMap.put(Todo.CREATED_DATE, Todo.CREATED_DATE);
      38:         sTodosProjectionMap.put(Todo.MODIFIED_DATE, Todo.MODIFIED_DATE);
      39:     }
      40:  
      41:     private static class DataBaseHelper extends SQLiteOpenHelper {
      42:  
      43:         public DataBaseHelper(Context context) {
      44:             super(context, DATABASE_NAME, null, DATABASE_VERSION);
      45:         }
      46:  
      47:         //创建表
      48:         @Override
      49:         public void onCreate(SQLiteDatabase db) {
      50:             Log.d(TAG, "create table :" + TABLE_NAME);
      51:             db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + Todo._ID + " INTEGER PRIMARY KEY," + Todo.TITLE
      52:                     + " TEXT," + Todo.CONTENT + " TEXT," + Todo.CREATED_DATE + " INTEGER," + Todo.MODIFIED_DATE
      53:                     + " INTEGER)");
      54:             ContentValues values = new ContentValues();
      55:             values.put(Todo.TITLE, "test");
      56:             values.put(Todo.CONTENT, "dddddddd");
      57:             db.insert(TABLE_NAME, "title", values);
      58:         }
      59:  
      60:         //更新数据库表
      61:         @Override
      62:         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      63:             Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion
      64:                     + ", which will destroy all old data");
      65:             db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
      66:             onCreate(db);
      67:         }
      68:  
      69:     }
      70:  
      71:     //删除数据操作
      72:     @Override
      73:     public int delete(Uri uri, String selection, String[] selectionArgs) {
      74:         SQLiteDatabase db = dataBaseHelper.getWritableDatabase();
      75:         int count = 0;
      76:         //判断uri类型
      77:         switch (uriMatcher.match(uri)) {
      78:         case TODOS:
      79:             //如果以"/todo"结尾,则删除整个表数据
      80:             count = db.delete(TABLE_NAME, selection, selectionArgs);
      81:             break;
      82:         case TODO_ID:
      83:             //如果以“/todo/1”结尾,则删除ID=1的数据
      84:             String todoId = uri.getPathSegments().get(1);
      85:             count = db.delete(TABLE_NAME, Todo._ID + "=" + todoId
      86:                     + ((TextUtils.isEmpty(selection)) ? "" : " AND " + selection), selectionArgs);
      87:             break;
      88:         default:
      89:             throw new IllegalArgumentException("Unknown URI :" + uri);
      90:         }
      91:         getContext().getContentResolver().notifyChange(uri, null);
      92:         return count;
      93:     }
      94:     ......
      95:     ......
      96:     //其他方法省略

    至此我们就创建了一个ContentProvider了

    3、Provider的配置,在AndroidMainfest.xml配置

    示例代码三:

       1: <?xml version="1.0" encoding="utf-8"?>
       2: <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       3:     package="com.halzhang.android.provider" android:versionCode="1"
       4:     android:versionName="1.0">
       5:     <application android:icon="@drawable/icon" android:label="@string/app_name">
       6:         <!-- 
       7:     name属性为继承ContentProvider的类
       8:     authorities属性为属性对象路径
       9:      -->
      10:         <provider android:name=".TodoListProvider"
      11:             android:authorities="com.halzhang.android.provider.TodoList"></provider>
      12:         <activity android:name=".ContentProviderDemo" android:label="@string/app_name">

    OK,至此我们就创建了一个ContentProvider了。

  • 相关阅读:
    layer弹出层显示在top顶层
    PC上安装多个操作系统
    Windows下DLL查找顺序
    AHCI驱动安装
    Office 多版本共存
    Windows定时器
    Windows菜单
    Windows高精度时间
    VB6.0调用DLL
    时间服务器通讯协议
  • 原文地址:https://www.cnblogs.com/halzhang/p/1746589.html
Copyright © 2011-2022 走看看