1

たとえば、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.CursorWrapperInnerClassCastException

使用するときに非常に便利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
         } 
     }

}

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

4

0 に答える 0