14.1
创建定义schema的java类,将其命名为CrimeDBSchema。新建时包名为database.CrimeDbSchema
2.定义CrimeTable内部类CrimeDBSchema.java)
public static final class CrimeTable {
public static final String NAME = "crimes";
}
3.定义数据表字段(CrimeDBSchema.java)
public static final class Cols {
public static final String UUID = "uuid";
public static final String TITLE = "title";
public static final String DATE = "date";
public static final String SOLVED = "solved";
}
14.2
1.在数据库包中新建类,命名为CrimeBaseHelper.java,在类中添加
private static final int VERSION = 1;
private static final String DATABASE_NAME = "crimeBase.db";
public CrimeBaseHelper(Context context) {
super(context, DATABASE_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
2.打开SQLiteDatebase(CrimeLab.java)
private Context mContext;
private SQLiteDatabase mDatabase;
mContext = context.getApplicationContext();
mDatabase = new CrimeBaseHelper(mContext)
.getWritableDatabase();
3.编写SQL创建初始代码(CrimeBaseHelper.java)
db.execSQL("create table " + CrimeDbSchema.CrimeTable.NAME);
4.创建Crime数据表(CrimeBaseHelper.java)
NAME+ "(" +
" _id integer primary key autoincrement, " +
CrimeTable.Cols.UUID + ", " +
CrimeTable.Cols.TITLE + ", " +
CrimeTable.Cols.DATE + ", " +
CrimeTable.Cols.SOLVED +
")"
14.3
1.删除mCrimes相关代码(CrimeLab.java)
删掉横线标识处
在方框处加上下面的代码
return new ArrayList<>();
14.4
14.4.1
1.创建ContenVlaues(CrimeLab.java)
private static ContentValues getContentValues(Crime crime) {
ContentValues values = new ContentValues();
values.put(UUID, crime.getId().toString());
values.put(TITLE, crime.getTitle());
values.put(DATE, crime.getDate().getTime());
values.put(SOLVED, crime.isSolved() ? 1 : 0);
return values;
}
14.4.2
1.插入记录(CrimeLab.java)
ContentValues values = getContentValues(c);
mDatabase.insert(CrimeTable.NAME, null, values);
2.更新记录(CrimeLab.java)
public void updateCrime(Crime crime) {
String uuidString = crime.getId().toString();
ContentValues values = getContentValues(crime);
mDatabase.update(CrimeTable.NAME, values,
CrimeTable.Cols.UUID + " = ?",
new String[]{uuidString});
}
3.Crime数据刷新(CrimeFragment.java)
@Override
public void onPause() {
super.onPause();
CrimeLab.get(getActivity())
.updateCrime(mCrime);
}
14.5
1.查询Crime记录(CrimeLab.java)
private CrimeCursorWrapper queryCrimes(String whereClause, String[] whereArgs) {
Cursor cursor = mDatabase.query(
CrimeTable.NAME,
null, // Columns - null selects all columns
whereClause,
whereArgs,
null, // groupBy
null, // having
null // orderBy
);
return new CrimeCursorWrapper(cursor);
}
14.5.1
1.在数据库包中新建CrimeCursorWrapper类
(CrimeCursorWrapper.java)
extends CursorWrapper
public CrimeCursorWrapper(Cursor cursor) {
super(cursor);
}
2.新增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));
return null;
}
3.新增Crime构造方法(Crime.java)
删掉横线处代码,在方框处添加下列代码
this(UUID.randomUUID());
public Crime(UUID id) {
mId = id;
mDate = new Date();
}
4.完成getCrime()方法(CrimeCursorWrapper.java)
删掉红线处,在红框中添加
Crime crime = new Crime(UUID.fromString(uuidString));
crime.setTitle(title);
crime.setDate(new Date(date));
crime.setSolved(isSolved != 0);
return crime;
14.5.2
1.使用Cursor封装方法(CrimeLab.java)
找到红框位置,将原来的代码用下面代码替换,
private CrimeCursorWrapper queryCrimes(String whereClause, String[] whereArgs)
return new CrimeCursorWrapper(cursor);
2.返回Crime列表(CrimeLab.java)
删掉return new ArrayList<>();,添加如下代码
public List<Crime> getCrimes() {
List<Crime> crimes = new ArrayList<>();
CrimeCursorWrapper cursor = queryCrimes(null, null);
try {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
crimes.add(cursor.getCrime());
cursor.moveToNext();
}
} finally {
cursor.close();
}
return crimes;
}
重写getCrime(UUID)方法(CrimeLab.java)
删掉
return null;
添上
CrimeCursorWrapper cursor = queryCrimes(
CrimeTable.Cols.UUID + " = ?",
new String[]{id.toString()}
);
try {
if (cursor.getCount() == 0) {
return null;
}
cursor.moveToFirst();
return cursor.getCrime();
} finally {
cursor.close();
}
4.添加setCrimes(List)方法(CrimeListFragment.java)
public void setCrimes(List<Crime> crimes) {
mCrimes = crimes;
}
5.调用setCrimes(List)方法(CrimeListFragment.java)
mAdapter.setCrimes(crimes);