English | 中文
This project is a simple tools to deserialize SQLite data to Java Bean on Android.
For java Cursor also see SQLDataSet
implementation 'io.github.yeamy:sqlitedataset:1.2'publicclassFruit{@DsColumn("Name") publicStringname; // the column in database is "Name"publicStringfullName; // the column in database can be "fullName" or "full_name"@DsIgnorepublicStringcount; // ignore this fieldpublicFruitTypetype; // the name of the column is the same as the field// regist as custom type (see DsAdapter)publicSkinskin; // this field no DsColumn treat as extra type }Generally, using DsReader is an easy and fast way.
SQLiteDatabasedb = ...; // the sourceStringsql = "SELECT ..."; // the sqlFruitapple = DsReader.read(db, sql, Fruit.class); // read oneArrayList<Fruit> list = rDsReader.readArray(stmt, sql, Fruit.class);In order to deserialize custom field type, you may define a DsFieldReader.
SQLiteDatabasedb = ...; // the data sourceDsFieldReader<Skin> skinReader = newDsFieldReader<>(){/** * @param cursor query result dataSet * @param columnIndex column index in result dataet * @return field instance */Skinread(Cursorcursor, intcolumnIndex) throwsReflectiveOperationException{returnnewSkin(cursor.getString(columnIndex))} }; // gobalDsReader.register(Skin.class, skinReader); // add custom typeFruitf = reader.read(db, sql, Fruit.class); // read// instanceDsInsReaderreader = DsReader.with(Skin.class, skinReader) .with(Color.class, colorReader); Fruitf = reader.read(db, sql, Fruit.class); // readIf you want to do anything after the Bean read, you can implement DsObserver.class, and do it in onDsFinish().
publicclassVegetablesimplementsDsObserver{@DsColumn("Name") publicStringname; ... @OverridepublicvoidonDsFinish(){} }Data come from same row of Cursor can deserialize into an extra field.
source table:
| UserName | Province | CityName | ... |
|---|---|---|---|
| Nike | Guangdong | Shantou | ... |
| ... |
Usually, deserialize like this:
publicclassUser{@DsColumn("UserName") publicStringname; @DsColumn("Province") publicStringprovince; @DsColumn("CityName") publicStringcity; ... }to package province and city into same field location, see below:
publicclassUser{@DsColumn("UserName") publicStringname; ... // NOTICE:must without annotion DsColumn, field name cannot as same sa column,// otherwise using DsAdapter insteadpublicCitylocation} publicclassCity{@DsColumn("Province") publicStringprovince; @DsColumn("CityName") publicStringcity; ... }