Объявление провайдера содержимого

Это мой первый опыт использования контент-провайдера, но я следовал документации разработчика, но когда я запускаю программу, она говорит мне failed to find provider info

вот мой манифест







    
        
    
    
  
    

    






и мой контент-провайдер

public class BowlersDB extends ContentProvider {

private static final String DATABASE_NAME = "Bowlers";
private static final String BOWLERS_TABLE = "bowlers_table";
private static final int DATABASE_VERSION = 1;
public static final Uri CONTENT_URI = Uri.parse("content://com.tyczj.bowling.bowlersdb");
private static final UriMatcher uriMatcher;
static final String NAME = "name";
static final String ID = "_id";

private DatabaseHelper DBHelper;
private SQLiteDatabase db;

public Cursor getBowlers(){
    return db.query(BOWLERS_TABLE, new String[] {ID,NAME},null,null,null,null,NAME + " ASC");
}

public Cursor getId(String name){
    Cursor c = db.query(BOWLERS_TABLE, new String[] {ID,NAME},NAME + "='" + name +"'",null,null,null,null);
    if(c != null && c.moveToFirst()){
        do{
            if(c.getString(c.getColumnIndex(NAME)).equals(name)){
                return c;
            }
        }while(c.moveToNext());
    }
    return c;
}

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

    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        createTables(db);
    }

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

    private void createTables(SQLiteDatabase db){
        db.execSQL("CREATE TABLE " + BOWLERS_TABLE + "(" + ID + " integer primary key autoincrement, " +
                NAME + " TEXT);");
    }
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    int count = 0;
    int num = uriMatcher.match(uri);
    if(num == 1){
        count = db.delete(BOWLERS_TABLE, selection,selectionArgs);
    }else if(num == 2){
        String id = uri.getPathSegments().get(1);
        count = db.delete(BOWLERS_TABLE, ID + " = " + id + (!TextUtils.isEmpty(selection) ? " AND (" + 
                   selection + ')' : ""), 
                   selectionArgs);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return count;
}

@Override
public String getType(Uri uri) {
    if(uriMatcher.match(uri) == 1){
        return "vnd.android.cursor.dir/vnd.tyczj.bowlersdb ";
    }else if(uriMatcher.match(uri) == 2){
        return "vdn.android.cursor.item/vnd.tyczj.bowlersdb ";
    }else
        throw new IllegalArgumentException("Unsupported URI: " + uri);

}

@Override
public Uri insert(Uri uri, ContentValues values) {
    long rowID = db.insert(BOWLERS_TABLE,null, values);
    if(rowID > 0){
        Uri _uri = ContentUris.withAppendedId(CONTENT_URI,rowID);
        getContext().getContentResolver().notifyChange(_uri,null);
        return _uri;
    }else{
        throw new SQLException("Failed to insert row into " + uri);
    }
}

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

@Override
public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder();
    sqlBuilder.setTables(BOWLERS_TABLE);

    if(uriMatcher.match(uri) == 1){
        sqlBuilder.appendWhere(ID + " = " + uri.getPathSegments().get(1));
    }
    if(sortOrder == null || sortOrder == "")
        sortOrder = NAME;
    Cursor c = sqlBuilder.query(db, projection, selection, selectionArgs,null,null, sortOrder);
    c.setNotificationUri(getContext().getContentResolver(), uri);
    return c;
}

@Override
public int update(Uri uri, ContentValues values, String selection,
        String[] selectionArgs) {
    int count = 0;
    int num = uriMatcher.match(uri);
    if(num == 1){
        count = db.update(BOWLERS_TABLE, values, selection, selectionArgs);
    }else if(num == 2){
        count = db.update(BOWLERS_TABLE, values, ID + " = " + uri.getPathSegments().get(1) + (!TextUtils.isEmpty(selection) ? " AND (" + 
                  selection + ')' : ""), 
                  selectionArgs);
    }else{
        throw new IllegalArgumentException(
                "Unknown URI " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return count;
}

static{
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI("com.tyczj.bowling.bowlersdb","bowlers",1);
    uriMatcher.addURI("com.tyczj.bowling.bowlersdb","bowlers/#",2);
}

}

не уверен, что я сделал неправильно?

6
задан tyczj 28 November 2011 в 18:37
поделиться