Size: a a a

StartAndroid Ru Chat

2021 October 13

Аv

Админ vk.com/for_fl... in StartAndroid Ru Chat
Все это мне не нужно, нужны только имя и фамилия
источник

Аv

Админ vk.com/for_fl... in StartAndroid Ru Chat
И вопрос именно в том как исключить поля json из десериализации
источник

Аv

Админ vk.com/for_fl... in StartAndroid Ru Chat
Когда в объекте их вообще нет
источник

SP

Sergey Panov in StartAndroid Ru Chat
Просто не указывайте в финальной модели поля, которые Вам не нужны
источник

Аv

Админ vk.com/for_fl... in StartAndroid Ru Chat
Я вроде так делал, у меня кидало исключения
источник

Аv

Админ vk.com/for_fl... in StartAndroid Ru Chat
Должно быть норм?
источник

SP

Sergey Panov in StartAndroid Ru Chat
@SerializedName аннотацию добавьте к полям и должно быть норм
источник

Аv

Админ vk.com/for_fl... in StartAndroid Ru Chat
Спасибо, попробую
источник

Аv

Админ vk.com/for_fl... in StartAndroid Ru Chat
Но вроде когда кидало исключения, @SerializedName уже были на всех полях
источник

SP

Sergey Panov in StartAndroid Ru Chat
какое исключение?
источник

Аv

Админ vk.com/for_fl... in StartAndroid Ru Chat
Не помню точно полное название, но на Json... начиналось
источник

Аv

Админ vk.com/for_fl... in StartAndroid Ru Chat
Вроде JsonSyntax..
источник

AU

Alexander Ukolov in StartAndroid Ru Chat
привет. пример не дам, статьи не посоветую, но вкратце могу рассказать про подход при работе с ретрофит и корутинами (возможно, что-то лишнее попадет). этот подход можно описать следующим образом. апи ретрофита должно возвращать или нужный тебе экземпляр класса или экземпляр класса, завернутый в какой-нибудь свой враппер. для обоих случаев можно использовать класс-перехватчик ответов какой-нибудь RequestExecutor<T> и в нем осуществлять маппинг ретрофитовского Response в нужный класс. если возвращать из апи экземпляр класса, то в экзекьютере нужно кидать исключения, которые могут быть перехвачены на вышележащих уровнях, если возвращать враппер, то враппер можно разделить на Success и Failure с какими-то параметрами. в обоих случаях в сущности можно передать все что нужно для идентификации запроса. при этом апи ретрофита должно быть суспенд (современная версия уже это поддерживает). далее в классах цепочки вызовов можно осуществить маппинг сущности (это будет проще сделать, если был выбран вариант без враппера) для разных слоев (в частности для приведения ее к сущности бизнес-логики, но это не обязательно и зависит от ситуации). метод класса, который является вышележащим в цепочки вызовов апи может быть вызван из вью модели. это может быть как ваншот вызов (при инициализации) или как реакция на повторяющееся действие, например - нажатие на кнопку. у вью модели есть свой скоуп (viewModelScope, чтобы понять как он устроен можно посмотреть его исходники, они находятся в библиотеке lifecycle.viewmodel вроде бы, но могу ошибаться). далее используешь launch. указывать диспетчера не обязательно, так как ретрофит сам выберет нужного диспетчера из коробки. что касается Flow (то это уже другая история, имхо это будет актуально для WebSocket-подобных протоколов (когда сервер не присылает content-length, как в HTTP, а шлет потоковые данные). но во вью можно передать данные из апи ретрофит из вьюмодел с помощью Flow/Channel (в зависимости от ситуации).
источник

R

Rulevsky in StartAndroid Ru Chat
спасибо за очень интересный и развернутый ответ. 2 вопроса
1) Маппинг - это сложить данные в лист, сэт, мап?
2) а как правильно запустить suspend функцию допустим в onCreate.
А то GlobalScope вроде как опасный, а по другому пока не вышло если правильно помню
источник

AU

Alexander Ukolov in StartAndroid Ru Chat
1) маппинг: DataModel (сущность из Retrofit API) => DomainModel (модель для бизнес-логики)
2) in CustomViewModel... fun someMethod() { viewModelScope.launch { progressbar.show(); retrofit.call(params); progressbar.hide() } }, in View layer... viewModel.someMethod()
источник

AU

Alexander Ukolov in StartAndroid Ru Chat
если нужно прям ваншот-ваншот, чтобы только один раз и только в activity.oncreate (независимо от того, умерло активити, изменилась ли конфигурация), то нужно самому придумать логику :), например, полечко булевое добавить во вьюмодель :)
источник

AU

Alexander Ukolov in StartAndroid Ru Chat
я тут как раз пета ковыряю своего сижу. можно как-то так сделать:
internal class MainViewModel(private val testConnectionInteractor: TestConnectionInteractor) :
   ViewModel() {

   private val _viewState: MutableStateFlow<ViewState?> = MutableStateFlow(null)
   val viewState: StateFlow<ViewState?> = _viewState.asStateFlow()

   private val _ping: MutableStateFlow<ServerSuccessResponse?> = MutableStateFlow(null)
   val ping: StateFlow<ServerSuccessResponse?> = _ping.asStateFlow()

   fun ping() {
       viewModelScope.launch {
           _viewState.value = ViewState(true)
           try {
               val serverSuccessResponse = testConnectionInteractor.ping()
               _ping.value = serverSuccessResponse
           } catch (exception: RequestException) {
               when (exception) {
                   is RequestException.ResponseBodyNull -> Log.d("TAG", "ResponseBodyNull")
                   is RequestException.ResponseErrorBodyNull -> Log.d("TAG", "ResponseErrorBodyNull")
                   is RequestException.Runtime -> Log.d("TAG", "Runtime ${exception.throwable.message}")
                   is RequestException.ServerError -> Log.d("TAG", "ServerError ${exception.errorBody.string()}")
               }
           }
           _viewState.value = ViewState(false)
       }
   }

   data class ViewState(
       val progressBarVisibility: Boolean,
   )
}
источник

R

Rulevsky in StartAndroid Ru Chat
Спасибо, сохраню себе
источник

D

Dmitriy in StartAndroid Ru Chat
привет, у меня есть recyclerview gridlayout в каждом айтеме exoplayer проблема в том, что фокус только на первом айтеме  воспроизводит видео, остальные  видео пока на них фокус не попадет не воспроизводиться , как с делать чтобы фокус был на 2 элементах
источник

AU

Alexander Ukolov in StartAndroid Ru Chat
хм... фокус на 2-х элементах невозможен (может в мультискрининге возможен, но я с ним не работал).
источник