加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

content provider write

发布时间:2020-12-17 01:26:05 所属栏目:安全 来源:网络整理
导读:reference: http://jlins.javaeye.com/blog/561434 ?如果需要创建你自己的cotent?provider,也就是定制自己特有的,你需要做的其实很简单,那就是从抽象类ContentProvider派生出你自己的类,并且实现里面所有的抽象方法,包括:?? ? query(Uri,?String[],?Str

reference: http://jlins.javaeye.com/blog/561434

  1. ?如果需要创建你自己的cotent?provider,也就是定制自己特有的,你需要做的其实很简单,那就是从抽象类ContentProvider派生出你自己的类,并且实现里面所有的抽象方法,包括:??

?



  1. query(Uri,?String[],?String,?String)?which?returns?data?to?the?caller??

?

    1. insert(Uri,?ContentValues)?which?inserts?new?data?into?the?content?provider??
    1. update(Uri,?ContentValues,?String[])?which?updates?existing?data?in?the?content?provider??

    1. delete(Uri,?String[])?which?deletes?data?from?the?content?provider??

    1. getType(Uri)?which?returns?the?MIME?type?of?data?in?the?content?provider??

    1. 在你的content?provider里面,你有随意选择存储媒介的权利,你可以用传统文件,xml,甚至是一些特定的web?service,?当然你也可以选择用的最为广泛的SQLite??

    1. 在你自己的类中,你需要定义一个public?static?final?Uri?命名为CONTENT_URI。??


?

  1. public?class?BooksProvider?extends?ContentProvider??

?

  1. {??
  2. ???public?static?final?String?PROVIDER_NAME?=??
  3. ??????"MyContentProvider";????
  4. ??
  5. ???public?static?final?Uri?CONTENT_URI?=??
  6. ??????Uri.parse("content://"+?PROVIDER_NAME?+?"/books");????
  7. ??
  8. ???public?static?final?String?_ID?=?"_id";??
  9. ???public?static?final?String?TITLE?=?"title";??
  10. ???public?static?final?String?ISBN?=?"isbn";??
  11. ???private?static?final?int?BOOKS?=?1;??
  12. ???private?static?final?int?BOOK_ID?=?2;???????
  13. ???private?static?final?UriMatcher?uriMatcher;??
  14. ??
  15. ???static{??
  16. ??????uriMatcher?=?new?UriMatcher(UriMatcher.NO_MATCH);??
  17. ??????uriMatcher.addURI(PROVIDER_NAME,?"books",?BOOKS);??
  18. ??????uriMatcher.addURI(PROVIDER_NAME,?"books/#",?BOOK_ID);??
  19. ???}??

  1. //---for?database?use---??
  2. ???private?SQLiteDatabase?booksDB;??
  3. ???private?static?final?String?DATABASE_NAME?=?"Books";??
  4. ???private?static?final?String?DATABASE_TABLE?=?"titles";??
  5. ???private?static?final?int?DATABASE_VERSION?=?1;??
  6. ???private?static?final?String?DATABASE_CREATE?=??
  7. ?????????"create?table?"?+?DATABASE_TABLE?+??
  8. ?????????"?(_id?integer?primary?key?autoincrement,?"??
  9. ?????????+?"title?text?not?null,?isbn?text?not?null);";????
  10. ??
  11. ???@Override??
  12. ???public?boolean?onCreate()?{??
  13. ??????Context?context?=?getContext();??
  14. ??????DatabaseHelper?dbHelper?=?new?DatabaseHelper(context);??
  15. ??????booksDB?=?dbHelper.getWritableDatabase();??
  16. ??????return?(booksDB?==?null)??false:true;??
  17. ???}??

    1. ?private?static?class?DatabaseHelper?extends?SQLiteOpenHelper??
    2. ???{??
    3. ??????DatabaseHelper(Context?context)?{??
    4. ?????????super(context,?DATABASE_NAME,?null,?DATABASE_VERSION);??
    5. ??????}??
    6. ??
    7. ???
    8. ??????@Override??
    9. ??????public?void?onCreate(SQLiteDatabase?db)??
    10. ??????{??
    11. ?????????db.execSQL(DATABASE_CREATE);??
    12. ??????}??
    13. ????
    14. ??????@Override??
    15. ??????public?void?onUpgrade(SQLiteDatabase?db,?int?oldVersion,??
    16. ??????int?newVersion)?{??
    17. ?????????Log.w("Content?provider?database",??
    18. ??????????????"Upgrading?database?from?version?"?+??
    19. ??????????????oldVersion?+?"?to?"?+?newVersion?+??
    20. ??????????????",?which?will?destroy?all?old?data");??
    21. ?????????db.execSQL("DROP?TABLE?IF?EXISTS?titles");??
    22. ?????????onCreate(db);??
    23. ??????}??
    24. ???}?

  1. ?@Override??
  2. ???public?String?getType(Uri?uri)?{??
  3. ??????switch?(uriMatcher.match(uri)){??
  4. ?????????//---get?all?books---??
  5. ?????????case?BOOKS:??
  6. ????????????return?"vnd.android.cursor.dir/vnd.learn2develop.books?";??
  7. ?????????//---get?a?particular?book---??
  8. ?????????case?BOOK_ID:??
  9. ????????????return?"vnd.android.cursor.item/vnd.learn2develop.books?";??
  10. ?????????default:??
  11. ????????????throw?new?IllegalArgumentException("Unsupported?URI:?"?+?uri);??
  12. ??????}??
  13. ???}??
    1. ??@Override??
    2. ???public?Cursor?query(Uri?uri,?String[]?projection,?String?selection,??
    3. ??????String[]?selectionArgs,?String?sortOrder)?{??????
    4. ??
    5. ??????SQLiteQueryBuilder?sqlBuilder?=?new?SQLiteQueryBuilder();??
    6. ??????sqlBuilder.setTables(DATABASE_TABLE);??????
    7. ??
    8. ??????if?(uriMatcher.match(uri)?==?BOOK_ID)??
    9. ?????????//---if?getting?a?particular?book---??
    10. ?????????sqlBuilder.appendWhere(??
    11. ????????????_ID?+?"?=?"?+?uri.getPathSegments().get(1));?????????
    12. ??
    13. ??????if?(sortOrder==null?||?sortOrder=="")??
    14. ?????????sortOrder?=?TITLE;??
    15. ??
    16. ?????????Cursor?c?=?sqlBuilder.query(??
    17. ?????????booksDB,??
    18. ?????????projection,??
    19. ?????????selection,??
    20. ?????????selectionArgs,??
    21. ?????????null,??
    22. ?????????null,??
    23. ?????????sortOrder);??
    24. ??
    25. ??????//---register?to?watch?a?content?URI?for?changes---??
    26. ??????c.setNotificationUri(getContext().getContentResolver(),?uri);??
    27. ??????return?c;??
    28. ???}??
      1. @Override??
      2. ???public?Uri?insert(Uri?uri,?ContentValues?values)?{??
      3. ??????//---add?a?new?book---??
      4. ??????long?rowID?=?booksDB.insert(??
      5. ?????????DATABASE_TABLE,?"",?values);?????????????
      6. ??
      7. ??????//---if?added?successfully---??
      8. ??????if?(rowID>0)??
      9. ??????{??
      10. ?????????Uri?_uri?=?ContentUris.withAppendedId(CONTENT_URI,?rowID);??
      11. ?????????getContext().getContentResolver().notifyChange(_uri,null);???
      12. ?????????return?_uri;??
      13. ??????}??
      14. ??
      15. ??????throw?new?SQLException("Failed?to?insert?row?into?"?+?uri);??
      16. ???}??
      17. ????
      18. ???@Override??
      19. ???public?int?delete(Uri?arg0,?String?arg1,?String[]?arg2)?{??
      20. ??????//?arg0?=?uri???
      21. ??????//?arg1?=?selection??
      22. ??????//?arg2?=?selectionArgs??
      23. ??
      24. ??????int?count=0;??
      25. ??????switch?(uriMatcher.match(arg0)){??
      26. ?????????case?BOOKS:??
      27. ????????????count?=?booksDB.delete(??
      28. ???????????????DATABASE_TABLE,??
      29. ???????????????arg1,??
      30. ???????????????arg2);??
      31. ??
      32. ????????????break;??
      33. ??
      34. ?????????case?BOOK_ID:??
      35. ????????????String?id?=?arg0.getPathSegments().get(1);??
      36. ????????????count?=?booksDB.delete(??
      37. ???????????????DATABASE_TABLE,??
      38. ???????????????_ID?+?"?=?"?+?id?+??
      39. ???????????????(!TextUtils.isEmpty(arg1)???"?AND?("?+??
      40. ???????????????arg1?+?')'?:?""),??
      41. ???????????????arg2);??
      42. ????????????break;??
      43. ??
      44. ?????????default:?throw?new?IllegalArgumentException(??
      45. ????????????"Unknown?URI?"?+?arg0);???
      46. ??
      47. ??????}???
      48. ??
      49. ??????getContext().getContentResolver().notifyChange(arg0,?null);??
      50. ??
      51. ??????return

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读