Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 主键不是安卓的_Android_Kotlin_Android Room - Fatal编程技术网

Android 主键不是安卓的

Android 主键不是安卓的,android,kotlin,android-room,Android,Kotlin,Android Room,我正在创建包含学生和班级的简单数据库 我创建了实体和视图模型的多对多关系 但是,我注意到两者的id都没有增加 @Entity(tableName = "students") class Student( val name: String, val lastName: String ) { @PrimaryKey(autoGenerate = true) var id: Int = 0 } 这是表创建的结果: val student = Student("

我正在创建包含学生和班级的简单数据库

我创建了实体和视图模型的多对多关系

但是,我注意到两者的id都没有增加

@Entity(tableName = "students")
class Student(
    val name: String,
    val lastName: String
) {
    @PrimaryKey(autoGenerate = true) var id: Int = 0
}
这是表创建的结果:

        val student = Student("Daniele", "daniele@mail.com")
        val student2 = Student("Daniele", "daniele@mail.com")

        Log.d("test", "student Id : ${student.id}")
        Log.d("test", "student Id : ${student2.id}")
        student Id : 0 student Id : 0

使用下面的代码,它将解决您的问题

@Entity(tableName = "students")
data class Student(
    @PrimaryKey(autoGenerate = true) 
    var id: Int,
    val name: String,
    val lastName: String
)
守则:-

    val student = Student("Daniele", "daniele@mail.com")
    val student2 = Student("Daniele", "daniele@mail.com")

    Log.d("test", "student Id : ${student.id}")
    Log.d("test", "student Id : ${student2.id}")
    student Id : 0 student Id : 0
没有从数据库中获取任何信息。它正在创建2个学生对象(因此id为0)并打印它们

您应该将学生插入数据库,并测试他们,通过定义为相应@Dao类一部分的函数将他们提取出来

e、 g假设StudentDao接口为:-

@Dao
interface StudentDao {

    @Insert
    fun insert(student: Student) :Long

    @Query("SELECT * FROM students")
    fun getAllStudents() :List<Student>
}
i、 e.向数据库中添加2名学生,然后提取学生,得出:-

2019-11-29 00:30:15.568 D/STUDENTINFO: ID=1 Name = Fred Bloogs
2019-11-29 00:30:15.568 D/STUDENTINFO: ID=2 Name = Mary Smith
我相信Kotlin中上述代码的等价物类似于:-

    mDB.StudentDao().insert(Student("Fred","Bloggs"))
    mDB.StudentDao().insert(Student("Mary","Smith"))
    val studentsList = mdb.StudentDao().getAllStudents()
    for (s :Student in studentsList) {
        Log.d("STUDENTINFO","ID= ${s.id} Name = ${s.name} ${s.lastName}" )
    }

在第二个代码片段中,您将展示如何创建
Student
类型的对象。你们把它添加到数据库了吗?是的,我在studentDao类中使用studentDao.insert方法delcare。可能是id保存正确,但记录本地对象不会增加它?我假设,在插入之后,您正在记录与上面创建的相同的对象。您应该首先从数据库中获取它们:)val student1=studentDao.getById(1)Log.d(“test”,“student 1id:${student1.value?.id}”)结果为空如果您确保插入了多个学生,则确保插入了多个学生(日志还包括姓名和电子邮件),或者只是尝试从数据库中获取第一个学生(如果有并记录其数据)我很确定,如果您使用autoIncrementI将数据添加到类定义中,则不会发生这种情况。没有任何更改。consctrutor中的主键也不起作用。我只是在使用insert的任何地方都传递0,但仍然会得到null通过此链接-不要传递primery键的任何值我尝试不传递任何值它抱怨我将id作为字符串(另一个名称参数),我正在将suspend函数与协程一起使用,这是一个好方法吗?现在我遇到了一个真正的难题,就是在多对多表(studentsClassroom)中添加记录,并在同一个recyclerView中显示它们
    mDB.StudentDao().insert(Student("Fred","Bloggs"))
    mDB.StudentDao().insert(Student("Mary","Smith"))
    val studentsList = mdb.StudentDao().getAllStudents()
    for (s :Student in studentsList) {
        Log.d("STUDENTINFO","ID= ${s.id} Name = ${s.name} ${s.lastName}" )
    }