Pull to refresh
-23
0
Илья Поколев @pin2t

Программист

Send message
Я бы вообще второй catch убрал. Я про общую идею, исключения я просто скопировал. Там и с корутинами лажа вообщем-то
Такая кажущаяся общей функция на самом деле нифига не общая и не решает никаких задач. вы также туда передаете api::request1 и api::request2 и параметры к ним, просто в очень непонятном и причудливом виде.
Надо просто сделать класс TokenApi, который будет вызывать эти же функции но добавлять токен
class TokenApi(private val api: Api, private val prefs: SharedPreferences) {

    suspend fun request1(last: Long, autoView: Boolean): Answer1 {
        val res = api.request1(last, autoView, headers())
        saveToken(res)
        return res?.body()
    }

    suspend fun request2(id: Long): Answer2 {
        val res =  api.request2(id, headers())
        saveToken(res)
        return res?.body()
    }
    private val TOKEN_KEY = "Token"
    private val ID_KEY = "ID"
    fun headers(): Map<String, String> {
        return mapOf(
            TOKEN_KEY to prefs.getString(Constants.Preferences.SP_TOKEN_KEY, ""),
            ID_KEY to prefs.getLong(Constants.Preferences.SP_ID, -1).toString()
        )
    }

    fun saveToken(res) {
        val newToken = res?.headers()?.get(TOKEN_KEY)
        val newID = res?.headers()?.get(ID_KEY)?.toLong()
        if (newToken.notNull() && newID.notNull()) {
            prefs.edit()
                .putString(TOKEN_KEY, newToken)
                .putLong(ID_KEY, newID)
                .apply()
        }
    }
}

...


try {
    val tApi = new TokenApi(api, prefs)
    val answer1 = tApi.request1(1, false)
    val answer2 = tApi.request2(1234)
} catch (e: Exception) {
       viewState.showError(e.message.toString())
} catch (e: InterruptedException) {
        viewState.showError(e.message.toString())
} finally {
        viewState.hideProgress()
}

Вот и все, проще и понятнее чем мудреж с дженериками
Тихий ужас у вас в коде. Почему
val answer1 = restClient.buildRequest<Answer1> {
            

возвращает Answer?, логично чтобы buildRequest возвращал Request, не?
Я совсем не разбираюсь в ж/д экономике, мне просто кажется что в Советском Союзе и России строили/строят контактные сети, отому что это самый дешевый вариант в долгосрочной перспективе
Ну тоесть контактная сеть все-таки есть, вместе с питающими подстанциями, вольтдобавочными трансформаторами и увеличенным сечением.
Конечно все это надо делать. Я просто имел в виду, что при наличии ж/д это все сделать намного проще, чем прокладывать линию электропередачи где-нить в лесу в горах.
Да, думаете их кк-то по-другому строят.
В целом то что поезд ходит по 5 раз в день туда/сюда это хорошо, техника работает, а не простаивает. Есть только сомнения, будут ли успевать заряжаться батареи в таком режиме.
Ну а коли уж государство за все платит тут да, можно делать что угодно. Купить пять локомотивов на батареях, например, которые будут 60% времени стоять и заряжать батареи, вместо одного дизельного, который ходит постоянно.
Интересно, почему Вы думаете что руководство австрийских ж/д не умеет считать?

Я — так не думаю. Уверен, руководство ж/д определенно хорошо умеет считать.
Строительство целой железной дороги под один состав это тоже подтверждает.
2 миллиона это только на один поезд, и служат они 15 лет. Контактным проводом могут питаться все составы в течение многих десятков лет
Да ладно, че там сложного. Загрузил столбы с проводами на железнодорожную платформу, едешь и ставишь столбы по пути. Наличие дороги все сильно упрощает, даже если она изначально не строилась под электропоезда.
Железную дорогу-то как-то построили, поезда в гору тоже не особо ходят. Железная дорога уже более-менее ровная, проводить провода по ней проще.
Большинство холестерина вырабатывается в самом организме. Правда из жира, надо жир есть.
Да, мужик вроде не призывал отказывал отказываться от кисломолочных продуктов. К сожалению че-то не смог найти это видео :(
Нет не веган. Ем все съедобное, пью все жидкое. Смотрел как-то давно видео на ютубе, в котором какой-то мужик призывал не пить молоко и не есть хлеб. с тех пор стараюсь не пить молоко и молочные продукты, и не ем хлеб.
Так детям молоко как раз надо пить, им полезно. А вот взрослым нет, не полезно. Молоко провоцирует развитие остеопороза у взрослых, взрослым молоко и молочные продукты есть не нужно.
Я не про это понимание, я про понимание на кровне концепций и организации кода. Вот кстати хороший пример с библиотекой. Представьте, вы написали программу, разложили все по интерфейсам и объектам, придумали как это все должно быть организовано, реализовали. А потом вдруг решили использовать библиотеку, которая лезет в ваши объекты с помощью сопоставления с образцом, или рефлекшеном. Все, можно сказать ваш дизайн больше не ваш, вы вынуждены подстраиваться под то, как библиотека использует ваши объекты, под библиотечный дизайн кода, библиотека начинает диктовать вам как вам писать программу. И весь код превращается в кашу, потому что нет больше оригинального дизана. Никогда не используйте такие библиотеки, всегда делайте как минимум свои обертки, ну или свои библиотеки.
Сборщик мусора это другое дело, он же появился как замена, а не как дополнение. У программиста в Java нет выбора, использовать его или нет, он может его только настраивать.

Information

Rating
5,052-nd
Location
Магнитогорск, Челябинская обл., Россия
Registered
Activity