我正在使用SimpleCursorAdapter在ListView中显示结果,但由于在搜索(使用SearchView小部件)期间必须多次查询数据库,因此我担心光标可能会保持打开状态。
以下是我如何查询数据库并在ListView中显示结果的方式:
class SearchCustomers extends AsyncTask<String,Void,Cursor>{
@Override
protected Cursor doInBackground(String... params) {
//get the query
String query=params[0].toLowerCase(Locale.getDefault());
Cursor cursor=mDB.searchCustomersByName((query != null ? query : "@@@@"));
return cursor;
}
@Override
protected void onPostExecute(Cursor result) {
if (result != null) {
String[] from = new String[] { QuickOrderDB.ID,
QuickOrderDB.NAME,
QuickOrderDB.ADDRESS,
QuickOrderDB.PHONE_NUMBER };
int[] to = new int[] { R.id.customerIDTextView,
R.id.customerNameTextView,R.id.customerAddressTextView ,
R.id.customerPhoneTextView };
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(SearchCustomersActivity.this,
R.layout.results_customer_item, result, from, to);
mResultsListView.setAdapter(cursorAdapter);
}
}
}
我尝试了许多方法来关闭游标,但即使在 mResultsListView.setAdapter(cursorAdapter);
之后关闭它,结果始终都是:一个空的 ListView。
我已经看到了几个问题,其中提到游标将自动关闭,但我想确保这是正确的。
是否有任何官方文档说明?SimpleCursorAdapter 是否真的会自动关闭游标?
谢谢!
mDB.searchCustomersByName
,这让我担心可能会导致内存泄漏。 - AxelswapCursor
函数,旧的光标会被关闭。 - njzk2