Android ContentResolver:使用游标传递数据而无需重新查询,或者在从活动查询时获取确切执行的游标
假设我有一个 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
}
}
}
如何使用游标传递数据或获取与查询返回的完全相同的游标。或者说这是不可能的?
Say, I'm having a ContentProvider
(which in fact do not performs database call) and I want to pass some additional data (for example, call statistics) with the cursor to the caller:
public class SomeProvider extends ContentProvider {
. . .
public Cursor query(....) {
// I can not set extras for cursor here
return new MyCursorImplementation(iterationData, callStats);
}
}
In activity, I want to make:
Cursor cursor = getContentResolver().query(...);
CallStats callStats = ((MyCursorImplementation)cursor).getCallStats();
But I can't make this because cursor is already wrapped in ContentResolver.CursorWrapperInner
and ClassCastException
is thrown.
It'd be very handy when using 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
}
}
}
How can I pass the data with the cursor or get exactly the same cursor that I've returned from query. Or it is impossible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论