说,我有一个ContentProvider
(实际上不执行数据库调用)并且我想将一些附加数据(例如,调用统计信息)与光标传递给调用者:
public class SomeProvider extends ContentProvider {
. . .
public Cursor query(....) {
// I can not set extras for cursor here
return new MyCursorImplementation(iterationData, callStats);
}
}
在活动中,我想做:
Cursor cursor = getContentResolver().query(...);
CallStats callStats = ((MyCursorImplementation)cursor).getCallStats();
但我不能这样做,因为光标已经被包裹ContentResolver.CursorWrapperInner
并被ClassCastException
抛出。
使用时会非常方便AsyncTask
:
protected class SomeAsyncTask extends AsyncTask<Uri, Void, Cursor> {
...
@Override
protected Cursor doInBackground(Uri... uris) {
return getContentResolver().query(uris[0], ...);
}
@Override
protected void onPostExecute(Cursor cursor) {
if (cursor != null) {
// update view with cursor data, do other things using cursor
CallStats callStats = ((MyCursorImplementation)cursor).getCallStats();
// do some UI changes using call statistics
// ...but fails here
}
}
}
如何使用游标传递数据或获得与查询返回的游标完全相同的游标。或者这是不可能的?