add方法有什么问题?

时间:2015-02-21 16:37:01

标签: android android-contentprovider

我目前正在开发一个关于Android内容提供商的简单程序。我使用SQLite数据库创建了自己的内容提供者,我在其中存储和处理朋友的生日。应用程序运行正常,但当我添加生日时,应用程序崩溃。但是,当我再次启动应用程序时,我可以显示从另一种方法showMybirthDays()添加的生日。

public void addTheBirthday(View v) {
        ContentValues values = new ContentValues();
        values.put(MyBirthProvider.NAME,
                ((EditText)findViewById(R.id.name)).getText().toString());
        values.put(MyBirthProvider.BIRTHDAY,
                ((EditText) findViewById(R.id.birthday)).getText().toString());
        Uri uri = getContentResolver().insert(MyBirthProvider.MYCONTENT_URI, v);

        Toast.makeText(this, uri.toString() + "inserted!", Toast.LENGTH_LONG).show();
}  

我尝试了没有uri.toString()的吐司,但它确实有效。所以问题是uri.toString(),但我无法找到我做错的地方? - 我卡住了 非常感谢任何帮助。感谢。

这是我的CONTENT_URI

static final String URL = "content://" + MYPROVIDER_NAME + "/myfriends/" + ID;
static final Uri MYCONTENT_URI = Uri.parse(URL);

这是我的提供者:

public class MyBirthProvider extends ContentProvider {

    static final String ID = "id";
    static final String NAME = "name";
    static final String BIRTHDAY = "birthday";

    static final String PROVIDER_NAME = "com.example.test.provider.Birthday";
    static final String URL = "content://" + MYPROVIDER_NAME + "/myfriends/" + ID;
    static final Uri MYCONTENT_URI = Uri.parse(URL);

    static final int FRIENDS = 1;
    static final int FRIENDS_ID = 2;

    DBHelper dbHelper;

    private static HashMap<String, String> BirthMap;

    static final UriMatcher uriMatcher;

    static {
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI(PROVIDER_NAME, "friends", FRIENDS);
        uriMatcher.addURI(PROVIDER_NAME, "friends/#", FRIENDS_ID);
    }

    private SQLiteDatabase database;
    static final String DATABASE_NAME = "MyBirthdayReminder";
    static final String TABLE_NAME = "mybirthTable";
    static final int DATABASE_VERSION = 1;
    static final String CREATE_TABLE = " CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            " name TEXT NOT NULL, " + " birthday TEXT NOT NULL);";

    private static class DBHelper extends SQLiteOpenHelper {

        public DBHelper(Context context) {
            // TODO Auto-generated constructor stub
            super(context, DATABASE_NAME, null, DATABASE_VERSION);

        }

        @Override
        // TODO Auto-generated constructor stub
        public void onCreate(SQLiteDatabase sqLiteDatabase) {
            sqLiteDatabase.execSQL(CREATE_TABLE);
        }

        @Override
        // TODO Auto-generated constructor stub
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
            Log.w(DBHelper.class.getName(), "Upgrading database frim version " + oldVersion + " to "
                    + newVersion + " .Old data will be destroyed");
            sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
            onCreate(sqLiteDatabase);
        }
    }

    @Override
    public boolean onCreate() {
        Context c = getContext();
        dbHelper = new DBHelper(c);
        database = dbHelper.getWritableDatabase();

        if (database == null)
            return false;
        else
            return true;
    }

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

        switch (uriMatcher.match(uri)) {
            case FRIENDS:
                qb.setProjectionMap(BirthMap);
                break;
            case FRIENDS_ID:
                qb.appendWhere(ID + "=" + uri.getLastPathSegment());
                break;
            default:
                throw new IllegalArgumentException("Unknown URI" + uri);
        }
        if (sortOrder == null || sortOrder == "") {
            sortOrder = NAME;
        }
        Cursor cursor = qb.query(database, projection, selection, selectionArgs, null, null, sortOrder);

        return cursor;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        long row = database.insert(TABLE_NAME, "", values);

        if (row > 0) {
            Uri newUri = ContentUris.withAppendedId(MYCONTENT_URI, row);
            getContext().getContentResolver().notifyChange(newUri, null);
            return null;
        }
        throw new SQLException("Fail to add a new record into " + uri);
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        int count = 0;

        switch (uriMatcher.match(uri)) {
            case FRIENDS:
                count = database.update(TABLE_NAME, values, ID + " = " + uri.getLastPathSegment() +
                        (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""), selectionArgs);
                break;
            default:
                throw new IllegalArgumentException("Unsupported URI " + uri);
        }
        getContext().getContentResolver().notifyChange(uri, null);
        return count;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        int count = 0;
        switch (uriMatcher.match(uri)) {
            case FRIENDS:
                count = database.delete(TABLE_NAME, selection, selectionArgs);
                break;
            case FRIENDS_ID:
                String id = uri.getLastPathSegment(); //gets the id
                count = database.delete(TABLE_NAME, ID + " = " + id + (!TextUtils.isEmpty(selection)
                        ? " AND (" + selection + ')' : ""), selectionArgs);
                break;
            default:
                throw new IllegalArgumentException("Unsupported URI " + uri);
        }

        getContext().getContentResolver().notifyChange(uri, null);
        return count;
    }

    @Override
    public String getType(Uri uri) {
        switch (uriMatcher.match(uri)) {
            case FRIENDS:
                return "vnd.android.cursor.dir/vnd.example.friends";
            case FRIENDS_ID:
                return "vnd.android.cursor.dir/vnd.example.friends";
            default:
                throw new IllegalArgumentException("Unsupported URI " + uri);
        }
    }
}

0 个答案:

没有答案