У меня проблема с View Model. В упражнении «Анализ» мне пришлось что-то сломать в коде, и я не могу найти ошибку. Может ли кто-нибудь помочь мне. Я новичок ie в программе Android и часто делаю глупые ошибки. Я постараюсь найти ошибку к тому времени. Большое спасибо за вашу помощь. С уважением, пакет
DAO com.example.mwproto1.ROOM
import androidx.lifecycle.LiveData import androidx.room. *
@Dao
interface PomiarDao {
@Insert
suspend fun addPomiar(pomiar: Pomiar)
@Query("SELECT * FROM pomiar ORDER BY id DESC")
suspend fun getAllPomiar():List<Pomiar>
@Insert
suspend fun addMultiplePomiar(vararg pomiar: Pomiar)
@Update
suspend fun updatePomiar(pomiar: Pomiar)
@Delete
suspend fun deletePomiar(pomiar: Pomiar )
@Query("SELECT avg(Stezenie) FROM Pomiar ")
fun average(): LiveData<Float>
}
REPOSITORY
package com.example.mwproto1.ROOM
import android.app.Application
import androidx.lifecycle.LiveData
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
class Repository(application: Application) {
private var pomiardao: PomiarDao
init {
val database = Database
.buildDatabase(application.applicationContext)
pomiardao = database.getPomiarDao()
}
fun averageasync(): Deferred<LiveData<Float>> =
CoroutineScope(Dispatchers.IO).async {
pomiardao.average()
}
}
ViewModel
package com.example.mwproto1.ViewModel
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import com.example.mwproto1.ROOM.Pomiar
import com.example.mwproto1.ROOM.Repository
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.runBlocking
class ViewModel(application: Application):AndroidViewModel(application) {
private var PomiarRepository: Repository = Repository(application)
private var allpomiar: Deferred<LiveData<Float>> =
PomiarRepository.averageasync()
fun AverageVM(): LiveData<Float> = runBlocking {
allpomiar.await()
}
}
Сущность
package com.example.mwproto1.ROOM
import android.os.Parcel
import android.os.Parcelable
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class Pomiar(
@ColumnInfo(name="Stezenie")
val Stezenie: String?,
@ColumnInfo(name="Data")
val Data: String?,
@ColumnInfo(name="Zegar")
val Zegar: String?,
@ColumnInfo(name="Posilek")
val Posilek: String?,
@ColumnInfo(name="Samopoczucie")
val Samopoczucie: String?,
@ColumnInfo(name="Stres")
val Stres: String?,
@ColumnInfo(name="Hiperglikemia")
val Hiperglikemia: String?
): Parcelable{
@PrimaryKey(autoGenerate = true)
var id :Int = 0
constructor(parcel: Parcel) : this(
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.readString()
) {
id = parcel.readInt()
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(Stezenie)
parcel.writeString(Data)
parcel.writeString(Zegar)
parcel.writeString(Posilek)
parcel.writeString(Samopoczucie)
parcel.writeString(Stres)
parcel.writeString(Hiperglikemia)
parcel.writeInt(id)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<Pomiar> {
override fun createFromParcel(parcel: Parcel): Pomiar {
return Pomiar(parcel)
}
override fun newArray(size: Int): Array<Pomiar?> {
return arrayOfNulls(size)
}
}
}
АНАЛИЗ-АКТИВНОСТЬ
package com.example.mwproto1
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import com.example.mwproto1.ROOM.Pomiar
import com.example.mwproto1.UI.PomiarAdapter
import kotlinx.android.synthetic.main.activity_analiza.*
import kotlin.properties.Delegates
public class Analiza : AppCompatActivity() {
private lateinit var textView: TextView
private lateinit var viewModel: ViewModel
private lateinit var daoAdapter:PomiarAdapter
private lateinit var pomiar: LiveData<Float>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_analiza)
viewModel = ViewModelProvider.AndroidViewModelFactory.getInstance(application)
.create(ViewModel::class.java)
textView = findViewById(R.id.TV7)
pomiar.observe(this,Observer {
textView.setText(it.toString()) })
}
}
ОШИБКА
E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.example.mwproto1, PID: 11239 java .lang.RuntimeException: Невозможно запустить действие ComponentInfo {com.example.mwproto1 / com.example.mwproto1.Analiza}: kotlin .UninitializedPropertyAccessException: значение свойства lateinit не было инициализировано в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 3270) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 09) в android .app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem. java: 83) в android .app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor. java: 135) в android .app.servertransactio n.TransactionExecutor.execute (TransactionExecutor. java: 95) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 2016) в android .os.Handler.dispatchMessage (Обработчик. * 1042) *: 107) в android .os.Looper.l oop (Looper. java: 214) в android .app.ActivityThread.main (ActivityThread. java: 7356) в java. lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 492) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 930) Причина: kotlin .UninitializedPropertyAccessException: pomiar свойства lateinit не был инициализирован в com.example.mwproto1.Analiza.onCreate (Analiza.kt: 34) в android .app.Activity .performCreate (Activity. java: 7802) в android .app.Activity.performCreate (Activity. java: 7791) в android .app.Instrumentation.callActivityOnCreate (Instrumentation. java: 1299) в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 3245) в android .app.ActivityThread.handleLaunchActivity (Activity Thread. java: 3409) в android .app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem. java: 83) в android .app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor. java: 135) в android .app.servertransaction.TransactionExecutor.execute (TransactionExecutor. java: 95) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 2016) в android .os.Handler .dispatchMessage (Обработчик. java: 107) в android .os.Looper.l oop (Looper. java: 214) в android .app.ActivityThread.main (ActivityThread. java: 7356) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 492) в com. android. internal.os.ZygoteInit.main (ZygoteInit. java: 930) I / Процесс: отправка сигнала. PID: 11239 SIG: 9 Отключен от целевой виртуальной машины, адрес: «localhost: 8603», транспорт: «socket»