在上一篇文章中,我们对content provider基础进行了详细的介绍。该文中介绍的content provider都是基于sqlite的,但实际上content provider是可以基于其他存储格式的。本文将开始介绍基于xml的content provider。
第一步,我们先介绍一个重要的部分Cursor。基于xml的content provider所使用的Cursor与基于sqlite的是不同的。基于xml的Cursor需要继承MatrixCursor类。本文先介绍MatrixCursor类。
MatrixCursor类位于android.database包中。其中定义了四个变量,用来存储相关的值,其介绍如下:
private final String[] columnNames; 存放列名
private Object[] data;
存放数据值。这里,我通常认为应该用一个表(二维数组来存放数据值),但实际上却是用一个一维数组来模拟二维数组。所以对于一个二维数组:
第一步,我们先介绍一个重要的部分Cursor。基于xml的content provider所使用的Cursor与基于sqlite的是不同的。基于xml的Cursor需要继承MatrixCursor类。本文先介绍MatrixCursor类。
MatrixCursor类位于android.database包中。其中定义了四个变量,用来存储相关的值,其介绍如下:
private final String[] columnNames; 存放列名
private Object[] data;
存放数据值。这里,我通常认为应该用一个表(二维数组来存放数据值),但实际上却是用一个一维数组来模拟二维数组。所以对于一个二维数组:
其存放在data中的格式为
private int rowCount = 0;
MatrixCursor中存放的数据行数。因此很容易理解data数组的长度必须大于等于(columnCount*rowCount );
private final int columnCount;
列数=columnNames长度
其构造函数为:
/**
* Constructs a new cursor with the given initial capacity.
*
* @param columnNames names of the columns, the ordering of which
* determines column ordering elsewhere in this cursor
* @param initialCapacity in rows
*/
public MatrixCursor(String[] columnNames, int initialCapacity) {
this.columnNames = columnNames;
this.columnCount = columnNames.length;
if (initialCapacity < 1) {
initialCapacity = 1;
}
this.data = new Object[columnCount * initialCapacity];
}
/**
* Constructs a new cursor.
*
* @param columnNames names of the columns, the ordering of which
* determines column ordering elsewhere in this cursor
*/
public MatrixCursor(String[] columnNames) {
this(columnNames, 16);
}
其中的initialCapacity,就是指存放数据值的数组的容量。
在前面