在DatabaseHelper类中使用getContentResolver()

时间:2015-04-15 15:13:01

标签: android sqlite android-contentprovider android-contentresolver

在帖子底部编辑

我刚开始在我的项目中使用ContentProviders,请原谅新手问题。如果它是相关的,我正在使用this教程作为参考。

根据我的理解,我必须向ContentProvider报告任何CRUD操作,以便通知我项目中任何其他区域的更改。但我的问题是我的CRUD操作都在我的DatabaseHelper.class内以及我的查询等。因此,当我尝试使用getContentResolver().CRUD(uri, cv, null, null)时,我会在getContentResolver()上标记Cannot resolve method消息。

现在,当我查看ContentResolver时,我发现我只能在extends Activity的课程中使用它,但由于我的所有CRUD操作都保存在我的DatabaseHelper.class extends SQLiteOpenHelper中1}}不是Activity

我不确定如何解决这个问题,如果有人能够指导初学者,那将非常感激。以下是我在DatabaseHelper中的CRUD操作,如果还需要其他任何操作,请询问:

添加

    void AddAccount(Account acc) {


    SQLiteDatabase db = this.getWritableDatabase();


    ContentValues cv = new ContentValues();

    cv.put(colName, acc.getName());
    cv.put(colComp, acc.getComp());
    cv.put(colAmount, acc.getAmt());
    cv.put(colPurpose, acc.getPurpose());
    cv.put(colTerms, acc.getTerms());
    cv.put(colPeriod, acc.getPeriod());
    cv.put(colBalance, acc.getAmt());
    cv.put(colStatus, acc.getStatus());
    cv.put(colDate, acc.getDate());
    cv.put(colEditDate, acc.getEditDate());

    db.insert(ACCOUNTS, colName, cv);
    getContentResolver().insert(ContentProviderDB.CONTENT_URI, cv);
    db.close();
}

更新

    public int UpdateAcc(Account acc) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(colName, acc.getName());
    cv.put(colComp, acc.getComp());
    cv.put(colAmount, acc.getAmt());
    cv.put(colPurpose, acc.getPurpose());
    cv.put(colTerms, acc.getTerms());
    cv.put(colPeriod, acc.getPeriod());
    cv.put(colEditDate, acc.getEditDate());
    cv.put(colStatus, acc.getStatus());
    Uri uri = Uri.parse(ContentProviderDB.CONTENT_URI + "/" + acc.getID());
    getContentResolver().update(uri, cv, null, null);
    return db.update(ACCOUNTS, cv, colID + "=?", new String[]{String.valueOf(acc.getID())});

}

删除

    public void DeleteAcc(Account acc) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(ACCOUNTS, colID + "=?", new String[]{String.valueOf(acc.getID())});
    Uri uri = Uri.parse(ContentProviderDB.CONTENT_URI + "/" + acc.getID());
    getContentResolver().delete(uri, null, null);
    db.close();

}

修改

我正在尝试一些东西,但我不知道它是否能正常工作,因为我甚至不知道我是否正确实施ContentProvider。到目前为止,它删除了错误,但有人可以确认这是否是我的问题的有效解决方案?

我最初以这种方式调用CRUD方法:dbHelper.AddAccount(acc);但由于我需要传递活动的上下文以允许getContextResolver()我将调用修改为dbHelper.AddAccount(getApplicationContext(),acc);并调整了CRUD这样的操作

    void AddAccount(Context con, Account acc) {


    SQLiteDatabase db = this.getWritableDatabase();


    ContentValues cv = new ContentValues();

    cv.put(colName, acc.getName());
    cv.put(colComp, acc.getComp());
    cv.put(colAmount, acc.getAmt());
    cv.put(colPurpose, acc.getPurpose());
    cv.put(colTerms, acc.getTerms());
    cv.put(colPeriod, acc.getPeriod());
    cv.put(colBalance, acc.getAmt());
    cv.put(colStatus, acc.getStatus());
    cv.put(colDate, acc.getDate());
    cv.put(colEditDate, acc.getEditDate());

    db.insert(ACCOUNTS, colName, cv);
    con.getContentResolver().insert(ContentProviderDB.CONTENT_URI, cv);
    db.close();
}

1 个答案:

答案 0 :(得分:0)

getContentResolver()是类android.content.Context的方法,因此要调用它,您肯定需要Context的实例(例如ActivityService)。< / p>

您需要通过班级Context。请参阅以下链接以获取更多详细信息

getcontentresolver () is undefined for the type