我想将此结构存储在Room数据库中,根对象是ScheduleModel
。
尝试使用@Entity和@PrivateKey后,出现error: Cannot figure out how to save this field into database.
错误。
谢谢。
data class ScheduleModel(
val data: Data
)
data class Class(
@PrimaryKey val id: Int,
val name: String,
val number: Int,
val level: String,
val schedule: List<Schedule>)
data class Data(
@SerializedName("student") val classById: Class)
data class Lesson(
val title: String,
val icon: String)
data class Schedule(
val index: String,
val lesson: Lesson,
val location: Any)
答案 0 :(得分:0)
您必须将不同的类型保存在不同的表中,并使用一对一或一对多交互。 例如:在ScheduleModel房间对象中,您保留Data的ID并从Data表中获取它。在教室对象中,您可以保存Shedules的ID等的列表。
答案 1 :(得分:-1)
尝试此代码。 首先用这种方式为模型类制作表格。
@Entity
public class MyTable {
@PrimaryKey(autoGenerate = true)
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private double ItemPrice;
public double getItemPrice() {
return ItemPrice;
}
public void setItemPrice(double itemPrice) {
ItemPrice = itemPrice;
}
}
之后,使dao类以这种方式执行CRUD操作。
@Dao
public interface MyTableDao {
@Insert
void insertData(MyTable myTable);
@Query("SELECT * FROM MyTable where id=:id and ItemPrice=:price")
List<MyTable> getData(int id,int price);
}
制作用于访问dao的数据库类,并定义数据库名称和版本。.
@Database(entities = {MyTable.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract MyTableDao getTableDao();
}
定义应用活动..
public class AppActivity extends Application {
static AppDatabase db;
@Override
public void onCreate() {
super.onCreate();
db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
}
public static AppDatabase getDatabase() {
return db;
}
}
此活动定义到android清单文件中,变成应用程序标签之类。
android:name=".db.AppActivity"
在调用活动或类似片段之后。
myTable.setItemPrice(200);
appDatabase.getTableDao().insertData(myTable);