我在其他活动中使用的活动中访问数据库。但是当我在数据库上使用getContentResolver.update()
时,它不会在我的CursorLoader中更新,尽管它访问相同的数据库(它是相同的queryUri )。当我将查询转储到db时,它会显示更新的值,但CursorLoader不会。
这是我的onCreateLoader方法:
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri queryUri;
if(id == ID_LOADER_PORTFOLIO) {
String[] projection = null;
String selection = null;
String[] selectionArguments = null;
queryUri = MainFeedContract.CONTENT_URI;
return new CursorLoader(this,
queryUri,
MainActivity.COLUMN_NAMES,
selection,
selectionArguments,
null);
}
return null;
}
这是我在相同活动中更新数据库的呼吁:
portfolioBuilder
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
})
.setPositiveButton("Apply",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EditText et_newValue = (EditText) view.findViewById(R.id.et_portfolio);
Double value = Double.valueOf(et_newValue.getText().toString());
String selectedSpinnerCurrency = spinner.getSelectedItem().toString();
ContentValues cv = new ContentValues();
cv.put("units",value);
getContentResolver().update(MainFeedContract.CONTENT_URI, cv, "name=?", new String[]{selectedSpinnerCurrency});
Log.d("QUERY", DatabaseUtils.dumpCursorToString(getContentResolver().query(MainFeedContract.CONTENT_URI, null, null, null, null)));
}
});
我在尝试更新数据库时犯了错误吗? :/
答案 0 :(得分:0)
您可能需要注册ContentObserver
在onResume()
中调用此方法 public void registerDataObserver() {
try {
getContext().getContentResolver().registerContentObserver(MainFeedContract.CONTENT_URI, true, new DataObserver(new Handler()));
} catch (IllegalStateException ise) {
}
}
DataObserver类
class DataObserver extends ContentObserver {
public DataObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
getLoaderManager().restartLoader(0, null, this);
}
}