たとえば、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
}
}
}
カーソルを使用してデータを渡す方法、またはクエリから返されたものとまったく同じカーソルを取得するにはどうすればよいですか。それとも無理ですか?