14. tháng 1 2025
Khi sử dụng Kotlin để định nghĩa một lớp Entity đơn giản của Room có tên là Todo, đoạn mã như sau:
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "todos")
data class Todo(
@PrimaryKey(autoGenerate = true) var id: Int,
var title: String,
var content: String,
) {
override fun toString() = title
}
Tuy nhiên, khi tạo một đối tượng Todo mới, bạn gặp lỗi:
val todo = Todo(title = title, content = content)
Lỗi báo cáo rằng:
No value passed for parameter 'id' (Không truyền giá trị cho tham số 'id')
Loại bỏ tham số id
khỏi hàm khởi tạo.
@Entity(tableName = "todos")
data class Todo(
var title: String,
var content: String,
) {
@PrimaryKey(autoGenerate = true) var id: Int = 0
override fun toString() = title
}
Sau khi chỉnh sửa thực thi Entity, nếu bạn chạy lại ứng dụng trên trình mô phỏng mà không xóa dữ liệu cũ, sẽ cần gỡ cài đặt ứng dụng trước rồi j88 online tái biên dịch và cài đặt lại.
Bạn có thể gặp lỗi sau:
java.lang.IllegalStateException: Room không thể xác minh tính toàn vẹn dữ liệu. Có vẻ như bạn đã thay đổi lược đồ nhưng quên cập nhật phiên bản. Bạn có thể dễ 789bet dang nhap dàng khắc phục điều này bằng cách tăng số phiên bản.
Ngay cả khi bạn đã cập nhật phiên bản cơ sở dữ liệu, nếu không viết logic di chuyển (migration), lỗi vẫn tiếp tục xuất hiện:
java.lang.IllegalStateException: Cần di chuyển từ phiên bản 1 sang phiên bản 2 nhưng không tìm thấy migration phù hợp. Vui lòng cung cấp con đường di chuyển thông qua RoomDatabase.Builder.addMigration(Migration ...) hoặc cho phép di chuyển phá hủy thông qua các phương thức RoomDatabase.Builder.fallbackToDestructiveMigration*.
Do đó, cách đơn giản nhất là gỡ cài đặt ứng dụng và bắt đầu lại từ đầu.