微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

content provider write

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.          defaultthrow new IllegalArgumentException(  
      45.             "UnkNown URI " + arg0);   
      46.   
      47.       }   
      48.   
      49.       getContext().getContentResolver().notifyChange(arg0, null);  
      50.   
      51.       return

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐