在帖子底部编辑
我刚开始在我的项目中使用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();
}
答案 0 :(得分:0)
getContentResolver()
是类android.content.Context
的方法,因此要调用它,您肯定需要Context
的实例(例如Activity
或Service
)。< / p>
您需要通过班级Context
。请参阅以下链接以获取更多详细信息