我使用Room并在构建项目时给了我这个错误:
经过数小时的搜索后,我发现错误的原因是我的实体类具有284字段,对于SQLite来说是可以的(每个表的限制为32767列),但是Java对方法或构造函数的参数限制为255。 / p>
这是实体:
@Entity(tableName = "file_table")
data class TheFile(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "rowId")
var fileId: Int = 0,
@ColumnInfo(name = "name_male")
var name_malek: String="",
@ColumnInfo(name = "tel_male")
var tel_malek: String=""
//[and more...]
这是道:
@Dao
interface TheFileDao {
@Query("SELECT * FROM file_table")
fun getAll(): LiveData<List<TheFile>>
}
打开[classname] _Impl.java时,发现Dao方法末尾的空间使用无法使用284参数并导致错误的构造函数来创建实体类的实例。
_result = new TheFile(_tmpFileId,_tmpName_malek,_tmpTel_malek,_tmpTel2_malek,_tmpTel3_malek,_tmpName_mostajer,_tmpTel_mostajer, and_more_parameter);
你们能给我任何解决方案吗?
答案 0 :(得分:0)
具有太多参数是非法的。您需要创建一些新字段。
答案 1 :(得分:0)
将这284个字段划分为不同的不同对象,并在Entity类中使用这些对象。
例如
@Entity(tableName = "my_table")
public class MyData {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "ListData")
@TypeConverters(DataTypeConverter.class)
private List<MyListObject> mList = null;
@Embedded
private User mUser;
public MyData() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<MyListObject> getList() {
return mList;
}
public void setList(List<MyListObject> list) {
this.mList = list;
}
public User getUser() {
return mUser;
}
public void setUser(User user) {
this.mUser = user;
}
}