Comments 12
Объясните новичку, зачем использовать Retrofit и прочие полезные библиотеки, если можно всё накодить без них?
Кто-то уже написал то, что скорее всего понадобится в большинстве проектов.
В случае с Retrofit, после того как один раз создан и настроен Retrofit клиент добавление еще одного запроса к Api занимает пару строк и пару минут. Кроме того не приходится заботиться об асинхронности самостоятельно (в андроид нельзя выполнять запросы к сети из главного (UI) потока), а без сторонних библиотек это требует много усилий и нервов :D
Если я ничего не путаю baseUrl метод билдера клиента всегда вроде требовал '/' в конце урла или это уже убрали в последних версиях?
Да, правильно помню таки https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit2/Retrofit.java#L515
Поправьте в статье чтобы у новичков паники не возникло :)
Вроде все теперь
При использовании этого адаптера интерфейсы Retrofit могут возвращать типы RxJava 2.x, например, Observable, Flowable или Single и т. д.
Приведите пожалуйста примеры, когда идиоматически правильно использовать Flowable & Observable в качестве возвращаемого параметра у интерфейса.
Различия между типами можно посмотреть например здесь
К чему я это все?
Когда я вижу в примерах Retrofit'a Observable меня просто в дрожь бросает. Вроде бы ничего плохого и «и так сойдет» но дьявол кроется в мелочах.
Мне кажется, большинство таких примеров пришли к нам прямиком из RxJava 1.x, причем еще до появления в ней Single и т.д. Переписывать все примеры у авторов либо нет времени, либо «и так сойдет» :) Ну а часть статей вообще бездумно скопированы, цифра 1 поменяна на 2 и добавлена строчка про Flowable. Так что найти хорошее объяснение на реальном примере — это надо еще очень постараться.
Спасибо, поизучал Retrofit по этой статье. Надо добавить:
С заголовками можно (по крайней мере сейчас) можно работать гораздо проще: https://square.github.io/retrofit/#api-declaration , раздел HEADER MANIPULATION.
Помимо асинхронных запросов можно делать синхронные. На примере Упражнения 3: вместо call.enqueue(this); пишем:
Response<SearchPage> response = call.execute();
System.out.println(response.code());
System.out.println(response.body());
и получаем непосредственно ответ.
3. Непонятно: и в примере из статьи, и в моём call
после получения response
долгое время (с минуту наверно) "висит" (call.isExecuted() == true
). Дальнейшему исполнению программы это не мешает, но непонятно почему и что с этим делать. Кто знает - подскажите.
4. Почему-то все примеры с Retrofit в интернетах - для Андроид. Его вообще для компов применяют или я зря его изучал? :)
Использование Retrofit 2.x в качестве REST клиента — Tutorial