Использование ViewModel в составлении реактивного ранца, каков наилучший подход к отправке параметров в класс модели преAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Использование ViewModel в составлении реактивного ранца, каков наилучший подход к отправке параметров в класс модели пре

Сообщение Anonymous »

Я хочу сохранить данные внутри телефона, не обращаясь к внутренней памяти устройства. В этом руководстве https://medium.com/@rowaido.game/persis ... c481bfed12 я использовал пошаговое руководство и сборку, и все работает отлично. Моя проблема заключается в том, что в учебнике используется ViewModelProvider.Factory, подход к обучению не позволяет мне отправлять параметры в класс viewModel.
Когда я когда-либо хочу вызвать MyApplication().UserRepository, ошибка говорит, что его необходимо инициализировать< /p>
Это моя обычная фабрика, которую я использовал:

Код: Выделить всё

class MyViewModelFactory( private val _mode: String, private val _size: List, private val _data: String, private val _repository: UserRepository ) : ViewModelProvider.NewInstanceFactory() { override fun  create(modelClass: Class): T { return SudokuViewModel(mode=_mode, _size = _size, _data = _data, _repository) as T } }
Это та часть, где я вызываю фабрику:

Код: Выделить всё

val userRepository: UserRepository = MyApplication().userRepository val viewModel: SudokuViewModel = viewModel( factory = MyViewModelFactory(_mode=mode, _size=size,_data= getSudokuData(context), _repository =  userRepository))
ошибка, которую я получаю при запуске кода:

Код: Выделить всё

FATAL EXCEPTION: main Process: com.example.sudokuapp, PID: 14438 kotlin.UninitializedPropertyAccessException: lateinit property userRepository has not been initialized at com.example.sudokuapp.MyApplication.getUserRepository(MyApplication.kt:15) at com.example.sudokuapp.SudokuUIKt.SudokuUI(SudokuUI.kt:59) at com.example.sudokuapp.SudokuAppKt$MyApp$1$2.invoke(SudokuApp.kt:47) at com.example.sudokuapp.SudokuAppKt$MyApp$1$2.invoke(SudokuApp.kt:44) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:139) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.navigation.compose.NavHostKt$NavHost$14$1.invoke(NavHost.kt:308) at androidx.navigation.compose.NavHostKt$NavHost$14$1.invoke(NavHost.kt:306) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:248) at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84) at androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:65) at androidx.navigation.compose.NavBackStackEntryProviderKt.access$SaveableStateProvider(NavBackStackEntryProvider.kt:1) at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:52) at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:51) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)


Подробнее здесь: https://stackoverflow.com/questions/788 ... ng-paramet
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»