Android ContentResolver:在不重新查询的情况下使用游标传递数据,或者在从活动查询时获取准确执行的游标

Android ContentResolver:在不重新查询的情况下使用游标传递数据,或者在从活动查询时获取准确执行的游标,android,cursor,android-contentprovider,Android,Cursor,Android Contentprovider,比如说,我有一个ContentProvider(实际上它不执行数据库调用),我想用光标将一些附加数据(例如,调用统计信息)传递给调用方: public class SomeProvider extends ContentProvider { . . . public Cursor query(....) { // I can not set extras for cursor here return new MyCursorImpl

比如说,我有一个
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
         } 
     }

}
受保护的类SomeAsyncTask扩展了AsyncTask{
...
@凌驾
受保护的游标doInBackground(Uri…Uri){
返回getContentResolver().query(URI[0],…);
}
@凌驾
受保护的void onPostExecute(游标){
如果(光标!=null){
//使用游标数据更新视图,使用游标执行其他操作
CallStats CallStats=((MyCursorImplementation)cursor.getCallStats();
//使用调用统计信息进行一些UI更改
//……但在这里失败了
} 
}
}

如何使用游标传递数据,或者如何获得从查询返回的完全相同的游标。或者这是不可能的?

为什么您的“调用统计信息”不只是
游标中的附加列?
。@Commonware调用统计信息是描述游标中包含的多个对象状态的单个对象。比如说,位于游标内的对象的具体类型或执行的时间(以秒为单位)查询-一些与单个查询相关的统计数据。那么呢?这是Java。Java有一个来自方法的返回值。您选择使用
ContentProvider
facade(出于莫名其妙的原因),因此返回值类型由Android决定,而不是由您决定。因此,您需要将“callstats”放入
光标中。如何机械地做到这一点取决于你自己。@commonware这是真的,谢谢。我认为有一种类似于extras的机制存在,不需要重新查询。