经过几个教程后,我终于让我的 CursorLoader 显示在我的 ListView 中,但我有一些问题希望你们能帮助我解决。
1)我的大问题是:
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
if(uriMatcher.match(uri)==CUSTOMERS){
DB.open();
return DB.leer();
}
else
{
return null;
}
}
如您所见,这是来自我的 Content Provider 类,我的问题是我不认为我需要打开我的数据库。当我把打开数据库的代码对我有用但是我不知道我是否需要在此处关闭或在执行此操作后关闭:
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1){
Uri uri = Contenido.CONTENT_URI;
return new CursorLoader(this, uri, null, null, null, null);
}
/** A callback method, invoked after the requested content provider returned all the data */
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
mAdapter.swapCursor(arg1);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
mAdapter.swapCursor(null);
}
我应该把 DB.close() 放在这个函数的任何地方吗?或者也许低于这个:
getSupportLoaderManager().initLoader(0, null, this);
getSupport 在 OnCreate Bundle 上。我真的不明白它是否需要关闭从光标查询打开的数据库。