vnd.android.cursor.dir在这段代码中的含义是什么?

时间:2014-01-05 15:54:46

标签: android

我正在关注一本书,并获得了内容提供商的代码 代码如下。但我对“vnd.android.cursor.dir”感到困惑 这有什么意义吗?

package net.learn2develop.ContentProviders;

public class BooksProvider extends ContentProvider
{
static final String PROVIDER_NAME =         “net.learn2develop.provider.Books”;
static final Uri CONTENT_URI =         Uri.parse(“content://”+ PROVIDER_NAME + “/books”);
static final String _ID = “_id”;    
static final String TITLE = “title”;     
static final String ISBN = “isbn”;
static final int BOOKS = 1;     
static final int BOOK_ID = 2;

private static final UriMatcher uriMatcher;     
static{         uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);             
          uriMatcher.addURI(PROVIDER_NAME, “books”, BOOKS);         
        uriMatcher.addURI(PROVIDER_NAME, “books/#”, BOOK_ID);     }

//---for database use--    
SQLiteDatabase booksDB;     
static final String DATABASE_NAME = “Books”;     
static final String DATABASE_TABLE = “titles”;     
static final int DATABASE_VERSION = 1;     
static final String DATABASE_CREATE =         “create table “ + DATABASE_TABLE +         “ (_id integer primary key autoincrement, “         + “title text not null, isbn text not null);”;

private static class DatabaseHelper extends SQLiteOpenHelper    
  {         
 DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);         }

    @Override         
   public void onCreate(SQLiteDatabase db)         
   {             
     db.execSQL(DATABASE_CREATE);         }

  @Override         
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
  {             
  Log.w(“Content provider database”, “Upgrading database from version “ + oldVersion + “ to “ + newVersion +  “, which will destroy all old data”);             
  db.execSQL(“DROP TABLE IF EXISTS titles”);             
 onCreate(db);         
}    
}     

 @Override     
 public int delete(Uri arg0, String arg1, String[] arg2) 
{  // arg0 = uri    // arg1 = selection         // arg2 =  selectionArgs         
 int count=0;         
 switch (uriMatcher.match(arg0))
 {         case BOOKS:             
      count = booksDB.delete(  DATABASE_TABLE, arg1, arg2);  
       break;         
   case BOOK_ID:             
 String id = arg0.getPathSegments().get(1);
          count = booksDB.delete(DATABASE_TABLE,   _ID + “ = “ + id + 
  (!TextUtils.isEmpty(arg1) ? “ AND (“ + arg1 + ‘)’ : “”), arg2); 
        break;        
 default: throw new IllegalArgumentException(“Unknown URI “ + arg0);        
 }
    getContext().getContentResolver().notifyChange(arg0, null); 
    return count;     
}

@Override     
public String getType(Uri uri)
 {         switch (uriMatcher.match(uri))
   {
     //---get all books--     
  case BOOKS:
        return “vnd.android.cursor.dir/vnd.learn2develop.books “;                    
//---get a particular book--       
 case BOOK_ID:            
       return “vnd.android.cursor.item/vnd.learn2develop.books “;      
           default:             
throw new IllegalArgumentException(“Unsupported URI: “ + uri);         
}  
}


@Override     
public Uri insert(Uri uri, ContentValues values) 
{        
//---add a new book--        
long rowID = booksDB.insert(DATABASE_TABLE, “”,values);
    //---if added successfully--      
if (rowID>0)        
{ 
        Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);                
  getContext().getContentResolver().notifyChange(_uri, null);             return _uri;
  }         throw new SQLException(“Failed to insert row into “ + uri);
}


 @Override     
 public boolean onCreate()
 {         
    Context context = getContext(); 
    DatabaseHelper dbHelper = new DatabaseHelper(context);       
  booksDB = dbHelper.getWritableDatabase();   
   return (booksDB == null)? false:true;     
  }

 @Override  
 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 
{         SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder();             
      sqlBuilder.setTables(DATABASE_TABLE);
    if (uriMatcher.match(uri) == BOOK_ID)
          //---if getting a particular book—
        sqlBuilder.appendWhere(_ID + “ = “ + uri.getPathSegments().get(1));
    if (sortOrder==null || sortOrder==””)  
         sortOrder = TITLE;
    Cursor c = sqlBuilder.query(booksDB, projection, selection,  selectionArgs,  null, null, sortOrder);
    //---register to watch a content URI for changes--        c.setNotificationUri(getContext().getContentResolver(), uri);         return c;     
 }

@Override     
public int update(Uri uri, ContentValues values, String selection,  String[] selectionArgs) 
{ 
    int count = 0;         
  switch (uriMatcher.match(uri))
{      
  case BOOKS:    
     count = booksDB.update(  DATABASE_TABLE, values, selection, selectionArgs);  
       break;         
  case BOOK_ID:
        count = booksDB.update(DATABASE_TABLE, values,  _ID + “ = “ + uri.getPathSegments().get(1) +  (!TextUtils.isEmpty(selection) ? “ AND (“ + selection + ‘)’ : “”), selectionArgs);           
   break;         
  default: throw new IllegalArgumentException(“Unknown URI “ + uri);         
  }         
 getContext().getContentResolver().notifyChange(uri, null);         
return count;    
 }
 }

在这段代码中,为什么我们在getType方法中使用“vnd.android.cursor.dir / vnd.learn2develop.books”?
这是什么意思?
请帮帮我。 : - )

0 个答案:

没有答案