【问题标题】:Using getContentResolver() within DatabaseHelper class在 DatabaseHelper 类中使用 getContentResolver()
【发布时间】:2015-04-15 15:13:01
【问题描述】:

在帖子底部编辑

我刚开始在我的项目中使用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 不是 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();
}

【问题讨论】:

    标签: android sqlite android-contentprovider android-contentresolver


    【解决方案1】:

    getContentResolver() 是类android.content.Context 的方法,所以要调用它,你肯定需要Context 的实例(例如ActivityService)。

    你需要通过你班级的Context。详情见以下链接

    getcontentresolver () is undefined for the type

    【讨论】:

    • 我在帖子中添加了关于传递活动上下文的编辑。您能否确认它是否是有效的解决方案?
    • 尝试在 Context 参数中传递 YourActivityName.this。
    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多