Android ContentResolver: передать данные с курсором без запроса или получить точный выполненный курсор при запросе из действия - PullRequest
1 голос
/ 09 сентября 2010

Скажем, у меня есть 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
         } 
     }

}

Как я могу передать данные с помощью курсора или получить точно такой же курсор, который я возвратил из запроса.Или это невозможно?

...