Cursor是个神奇的表数据处理工具,其任务就是封装数据表中的原始字段值,下面徐州APP开发公司小编就带大家一起了解一下它的具体操作方法。
从Cursor获取数据的代码大致如下所示:
String uuidString = cursor.getString(
cursor.getColumnIndex(CrimeTable.Cols.UUID));
String title = cursor.getString(
cursor.getColumnIndex(CrimeTable.Cols.TITLE));
long date = cursor.getLong(
cursor.getColumnIndex(CrimeTable.Cols.DATE));
int isSolved = cursor.getInt(
cursor.getColumnIndex(CrimeTable.Cols.SOLVED));
每从Cursor中取出一条crime记录,以上代码都要重复写一次。(这还不包括按照这些字段值创建Crime实例的代码。)
显然,遇到这种情况,我们应考虑到前面说过的代码复用原则。与其机械地编写重复代码,
不如创建可复用的专用Cursor子类。使用CursorWrapper可快速方便地创建Cursor子类。顾名思义,CursorWrapper能够封装一个个Cursor的对象,并允许在其上添加新的有用方法。
参照以下代码,在数据库包中新建CrimeCursorWrapper类。
创建CrimeCursorWrapper类(CrimeCursorWrapper.java)
public class CrimeCursorWrapper extends CursorWrapper {
public CrimeCursorWrapper(Cursor cursor) {
super(cursor);
}
}
可以看到,以上代码创建了一个Cursor封装类。该类继承了Cursor类的全部方法。注意,这样封装的目的就是为了定制新方法,以方便操作内部Cursor。
参照以下代码,新增获取相关字段值的getCrime()方法。
新增getCrime()方法(CrimeCursorWrapper.java)
public class CrimeCursorWrapper extends CursorWrapper {
public CrimeCursorWrapper(Cursor cursor) {
super(cursor);
}
public Crime getCrime() {
String uuidString = getString(getColumnIndex(CrimeTable.Cols.UUID));
String title = getString(getColumnIndex(CrimeTable.Cols.TITLE));
long date = getLong(getColumnIndex(CrimeTable.Cols.DATE));
int isSolved = getInt(getColumnIndex(CrimeTable.Cols.SOLVED));
return null;
}
}
我们需要返回具有UUID的Crime。在Crime.java中新增一个有此用途的构造方法,如下代码所示。
新增Crime构造方法(Crime.java)
public Crime() {
this(UUID.randomUUID());
mId = UUID.randomUUID();
mDate = new Date();
}
public Crime(UUID id) {
mId = id;
mDate = new Date();
}
最后,完成getCrime()方法,如下代码
新增getCrime()方法(CrimeCursorWrapper.java)
public Crime getCrime() {
String uuidString = getString(getColumnIndex(CrimeTable.Cols.UUID));
String title = getString(getColumnIndex(CrimeTable.Cols.TITLE));
long date = getLong(getColumnIndex(CrimeTable.Cols.DATE));
int isSolved = getInt(getColumnIndex(CrimeTable.Cols.SOLVED));
Crime crime = new Crime(UUID.fromString(uuidString));
crime.setTitle(title);
crime.setDate(new Date(date));
crime.setSolved(isSolved != 0);
return crime;
return null;
}
(Android Studio会让你确定是选择java.util.Date还是java.sql.Date。不要搞错,即便我们现在是在编写数据库相关代码,也应该选java.util.Date。)
最后,小编要提醒大家的是,在徐州APP开发公司中,经常会遇到Cursor封装数据表中的原始字段值的情况,所以正确掌握Cursor的用法是很有必要的,如果对于Cursor的用法大家还有哪些不太明白的地方,可随时来电咨询酷优网络,本公司专业从事APP开发、网站建设、微信开发等服务具有十多年的丰富经验,技术娴熟,实力雄厚。因此,只要您有需要,任何疑难问题我们都可以为您解决!