Скажем, у меня есть 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
}
}
}
Как я могу передать данные с помощью курсора или получить точно такой же курсор, который я возвратил из запроса.Или это невозможно?