Android Room“不良的RuntimeInvisibleParameterAnnotations属性”

时间:2019-07-19 04:43:39

标签: java android kotlin android-room

我使用Room并在构建项目时给了我这个错误:

enter image description here

经过数小时的搜索后,我发现错误的原因是我的实体类具有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);

你们能给我任何解决方案吗?

2 个答案:

答案 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;
    }
}