dbHelper.getWritableDatabase()不起作用

时间:2012-09-28 23:07:12

标签: java android database android-contentprovider sqliteopenhelper

我有一个自定义ContentProvider,带有自定义成员SQLiteDatabaseHelper 在尝试插入我的数据库时,在我的插入内部,我实例化我的DatabaseHelper,然后我尝试在该实例上调用getWritableDatabase()来获取SQLiteDatabase对象,但是我在getWritableDatabase()调用时强制关闭。

我的活动:

public class UserForm extends Activity {
    public void onSubmitClick(View v){
        userDatabase db = new userDatabase();
        db.insert(userDatabase.CONTENT_URI, null);
    ...}
...}

我的助手代码:

public static final class MainDatabaseHelper extends SQLiteOpenHelper{
    public MainDatabaseHelper(Context context) {            
        super(context, DBNAME, null, 1);
    }

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

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS Users");
    }
}

我的插入内容:

public class userDatabase extends ContentProvider {
     public Uri insert(Uri uri, ContentValues values) {
              MainDatabaseHelper dbHelper = new MainDatabaseHelper(getContext());
              SQLiteDatabase db = dbHelper.getWritableDatabase();
    ...}
...}

我在最后一行接近一个力量。

我知道dbHelper不是null。 我知道dbHelper构造函数已经运行了。 但是dbHelper onCreate从未运行过。

我的猜测是问题是帮助程序是实例化但从未创建过,可能是错误的?

注意:我尝试了没有内容提供程序的相同进程,我的活动中有一个帮助程序,一切正常。但是,当我在内容提供商内部这样做时,它不会...?

可能有什么问题???

1 个答案:

答案 0 :(得分:0)

您没有在Uri插入方法中实例化数据库。 插入内容应如下所示:

 @Override
    public Uri insert(Uri uri, ContentValues values) {
        String tabela = "";
        Uri contentu;
        long rowID;
        switch (uriMatcher.match(uri)) {
            case uriCode2:
                tabela = TABLE_CLIENTI;
                contentu = CONTENT_URI_CLIENTI;
                break;
            case uriCode4:
                tabela = TABLE_UZERI;
                contentu = CONTENT_URI_UZERI;
                break;
            default:
                tabela = "";
                contentu = uri;
                throw new IllegalArgumentException("Unsupported URI: " + uri);
        }

        rowID = db.insert(tabela, "", values);
        if (rowID > 0) {
            Log.e(TAGU,"Notify change...");
            Uri _uri = ContentUris.withAppendedId(contentu, rowID);
            getContext().getContentResolver().notifyChange(_uri, null);
            return _uri;
        }
        throw new SQLException("Failed to add a record into " + uri);
    }

其中db在contentProvider类声明之后声明,例如:

private SQLiteDatabase db;