Cursor是個(gè)神奇的表數(shù)據(jù)處理工具,其任務(wù)就是封裝數(shù)據(jù)表中的原始字段值,下面南昌APP制作開(kāi)發(fā)公司小編就帶大家一起了解一下它的具體操作方法。
從Cursor獲取數(shù)據(jù)的代碼大致如下所示:
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記錄,以上代碼都要重復(fù)寫(xiě)一次。(這還不包括按照這些字段值創(chuàng)建Crime實(shí)例的代碼。)
顯然,遇到這種情況,我們應(yīng)考慮到前面說(shuō)過(guò)的代碼復(fù)用原則。與其機(jī)械地編寫(xiě)重復(fù)代碼,
不如創(chuàng)建可復(fù)用的專(zhuān)用Cursor子類(lèi)。使用CursorWrapper可快速方便地創(chuàng)建Cursor子類(lèi)。顧名思義,CursorWrapper能夠封裝一個(gè)個(gè)Cursor的對(duì)象,并允許在其上添加新的有用方法。
參照以下代碼,在數(shù)據(jù)庫(kù)包中新建CrimeCursorWrapper類(lèi)。
創(chuàng)建CrimeCursorWrapper類(lèi)(CrimeCursorWrapper.java)
public class CrimeCursorWrapper extends CursorWrapper {
public CrimeCursorWrapper(Cursor cursor) {
super(cursor);
}
}
可以看到,以上代碼創(chuàng)建了一個(gè)Cursor封裝類(lèi)。該類(lèi)繼承了Cursor類(lèi)的全部方法。注意,這樣封裝的目的就是為了定制新方法,以方便操作內(nèi)部Cursor。
參照以下代碼,新增獲取相關(guān)字段值的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中新增一個(gè)有此用途的構(gòu)造方法,如下代碼所示。
新增Crime構(gòu)造方法(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會(huì)讓你確定是選擇java.util.Date還是java.sql.Date。不要搞錯(cuò),即便我們現(xiàn)在是在編寫(xiě)數(shù)據(jù)庫(kù)相關(guān)代碼,也應(yīng)該選java.util.Date。)
最后,小編要提醒大家的是,在南昌APP開(kāi)發(fā)中,經(jīng)常會(huì)遇到Cursor封裝數(shù)據(jù)表中的原始字段值的情況,所以正確掌握Cursor的用法是很有必要的,如果對(duì)于Cursor的用法大家還有哪些不太明白的地方,可隨時(shí)來(lái)電咨詢(xún)百恒網(wǎng)絡(luò),本公司專(zhuān)業(yè)從事APP開(kāi)發(fā)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)等服務(wù)具有十多年的豐富經(jīng)驗(yàn),技術(shù)嫻熟,實(shí)力雄厚。因此,只要您有需要,任何疑難問(wèn)題我們都可以為您解決!