content provider write

来源:互联网 发布:win7玩cf出现网络异常 编辑:程序博客网 时间:2024/06/11 15:06

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

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

 





  1. query(Uri, String[], 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, String[]) which updates existing data in the content provider  

    1. delete(Uri, String, 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

 

 

 

 

 

 

原创粉丝点击