所以,我现在正在开发一个带有数据库的应用程序。通过研究,很明显google(使用sqlite)的room是一个不错的选择。所以我有我的数据库完全设置,外键,还有 @Transaction
's(表示1对多或一对一关系)。
目前,我已经花了一整天的时间在某些事情上:每当我尝试为一个实体(表)创建一个构造函数时,如果有一个字符串以外的东西作为参数,它就会给我 incompatible types: <null> cannot be converted to int
错误(或浮动或双重等)。
我只是不明白为什么会发生这种情况,也尝试删除所有外键,并尝试用尽可能少的代码,但它就是不起作用。
仅供参考:错误发生在生成的类中。这个类是从dao接口(databaseaccessinterface)生成的,在这里您可以列出所有查询函数,包括关系。生成的类than调用相关实体的构造函数: _tmpFan = new Fan(null,null,null,null,null,null,_tmpCreatedAt);
像这样,比说 incompatible types: <null> cannot be converted to int
以前有没有人遇到过这个错误,或者你必须坚持到底?如果你需要知道我的代码的一部分,只要问一下,我就会提供它(要在一篇文章中发布所有这些内容可能需要大量代码,但我将在下面发布一些片段)
接口内的事务/关系:
@Transaction
@Query("SELECT * FROM measurement_session WHERE fan_id = :fanID")
public List<FansWithMeasureSessions> getMeasureSessionsOfFan(int fanID);
风扇等级:
@Entity (tableName = "fan",
foreignKeys = {
@ForeignKey(entity = MeasurementSession.class,
parentColumns = "fan_id",
childColumns = "fan_id",
onDelete = ForeignKey.CASCADE)
},
indices = {
@Index(value = "customer_id", unique = true)
}
)
public class Fan {
@ColumnInfo(name = "customer_id")
public int customerID;
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "fan_id")
public int fanID;
@ColumnInfo(name = "fan_name")
public String fanName;
@ColumnInfo(name = "fan_type")
public String fanType;
@ColumnInfo(name = "diameter")
public float diameter;
@ColumnInfo(name = "length")
public float length;
@ColumnInfo(name = "width")
public float width;
@ColumnInfo(name = "created_at")
@TypeConverters(DateConverter.class)
public Date createdAt;
public Fan(int customerID, String fanName, String fanType, float diameter, float length, float width, Date createdAt) {
this.customerID = customerID;
this.fanName = fanName;
this.fanType = fanType;
this.diameter = diameter;
this.length = length;
this.width = width;
this.createdAt = createdAt;
}
}
fanswithmeasuresessions类:
public class FansWithMeasureSessions {
@Embedded public Fan fan;
@Relation(
entity = MeasurementSession.class,
parentColumn = "fan_id",
entityColumn = "fan_id"
)
public List<MeasurementSession> measurementSessions;
}
注解掉了我的大部分其他代码,同时仍然保持错误,所以应该这样做!
1条答案
按热度按时间aamkag611#
解决方案:
将可空类型用于
float
,int
,double
等。这意味着您应该使用
Float
,Integer
,Double
数据类型(可为空)