Работа с Androind и Room в первый раз, и я смог выполнить несколько кодовых меток и учебных пособий, чтобы добиться вставки и отображения списка моих сущностей, но я не могу использовать другие мои методы репозитория в моем ViewModel из-за несоответствия типов, вот мой файл ViewModel
class CustomerViewModel(application: Application) : AndroidViewModel(application) {
// The ViewModel maintains a reference to the repository to get data.
private val repository: CustomerRepository
// LiveData gives us updated words when they change.
val allCustomers: LiveData<List<Customer>>
init {
// Gets reference to Dao from db to construct
// the correct repo.
val customerDao = AppDatabase.getInstance(application).customerDao()
repository = CustomerRepository(customerDao)
allCustomers = repository.getCustomers()
}
fun insert(customer: Customer) = viewModelScope.launch {
repository.insert(customer)
}
}
, и я пытаюсь добавить метод, подобный
fun find(id: Int) = viewModelScope.launch {
return repository.getCustomerByLocalId(id)
}
, но ide говорит, что здесь есть несоответствие типов? Required: Customer, Found: Job
вот мой репозиторий:
class CustomerRepository(private val customerDao: CustomerDao) {
fun getCustomers(): LiveData<List<Customer>> = customerDao.getAlphabetizedCustomers()
suspend fun getCustomerByLocalId(local_Id: Int): Customer =
customerDao.customerByLocalId(local_Id)
suspend fun insert(customer: Customer) {
customerDao.insert(customer)
}
companion object {
// For Singleton instantiation
@Volatile
private var instance: CustomerRepository? = null
fun getInstance(customerDao: CustomerDao) =
instance ?: synchronized(this) {
instance ?: CustomerRepository(customerDao).also { instance = it }
}
}
}
методы в CustomerDao
@Query("SELECT * from customers ORDER BY name ASC")
fun getAlphabetizedCustomers(): LiveData<List<Customer>>
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(customer: Customer)
@Query("SELECT * FROM customers WHERE local_id = :localId")
suspend fun customerByLocalId(localId: Int): Customer
РЕДАКТИРОВАТЬ Я пытался @ lena-bru 's предложение, но ошибка все еще там, кажется, есть 2 разных, несоответствие типов и что не должно быть возврата. Вы должны создать этот метод в другом месте? Ошибка IDE