ContentProvider对外共享数据的时候的query()方法是需要一个cursor的。
但是如果没有数据库,需要对外共享数据使用ContentProvider的时候怎么办?
而有一些其他方法操作也都是需要cursor的。
此时就需要MatrixCursor了。相当有趣,它相当于为你模拟了一个表。代码如下:
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
String[] tableCursor = new String[] { "name", "job", "salary" };
MatrixCursor cursor = new MatrixCursor(tableCursor);
cursor.addRow(new Object[] { "1111", "1111", "1111" });
return cursor;
}
以上来自:http://www.cnblogs.com/topcoderliu/archive/2011/04/26/2029576.html
MatrixCursor还可以对已经查询完成得到的Cursor中的数据进行在二次处理,完成对Cursor的数据过滤,代码如下:
MatrixCursor还可以对已经查询完成得到的Cursor中的数据进行在二次处理,完成对Cursor的数据过滤,代码如下:
private Cursor cursorFilter(Cursor cursor){
MatrixCursor matrixcursor=null;
if(cursor!=null&&cursor.getCount()>0){
matrixcursor = new MatrixCursor(columnNames);
while(cursor.moveToNext()){
for(int i=0;i<4;i++){
columns[i]=cursor.getString(i);
}
if(filterbyrule(columns[3],columns[2])){
matrixcursor.addRow(columns);
}
}
}
return matrixcursor;
}
其中,columns是用于向MatrixCursor中添加记录的数组,大小与原来Cursor的列数相等;columnNames即是原Cursor的列名数组。
Cursor 位于 android.database.Cursor类,它的设计是基于数据库服务产生的。
它有几个己知的子类,分别为:
- AbstractCursor
- AbstractWindowedCursor