Android Activity: запуск сетевой задачи при получении данных от ViewModelAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Activity: запуск сетевой задачи при получении данных от ViewModel

Сообщение Anonymous »

В приложении Android Views с сопрограммами Kotlin и ViewModel, собирающим данные из репозитория DataStore, мне нужно подключиться к устройству Bluetooth при получении этих данных. Что я сделал:
SettingsViewModel

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

@HiltViewModel
class SettingsViewModel @Inject constructor(
private val myRepository: MyRepository
) : ViewModel() {

val setting1State : StateFlow = myRepository.getSetting1().stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
""
)
val setting2State : StateFlow = myRepository.getSetting2().stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
""
)
}
MainActivity

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

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

private val settingsViewModel: SettingsViewModel by viewModels()
private var setting1 = ""
private var setting2 = ""
val socket : BluetoothSocket? by lazy (LazyThreadSafetyMode.NONE) {
...
}

onSettingsReceived() {
if (setting1 != "" && setting2 != "") {
lifecycleScope.launch (Dispatchers.IO) {
...
socket.connect()
}
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
launch {
settingsViewModel.setting1State.collect {
setting1 = it
onSettingsReceived()
}
}
launch {
settingsViewModel.setting2State.collect {
setting2 = it
onSettingsReceived()
}
}
}
}
}
}
Это решение работает в большинстве случаев, однако оно некрасиво, и часто оператор socket.connect() выполняется дважды за очень короткий промежуток времени, поэтому я этого не делаю. думаю, это хорошо. Кроме того, у меня случаются необъяснимые отключения, и я хочу быть уверен, что это не основная причина.
Есть идеи, как это улучшить?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -viewmodel
Ответить

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

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

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

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

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