Android studio kotlin okhttp

Manage REST API in Kotlin with Okhttp3, Retrofit2, Gson, and Rxjava2

Md. Imran Choudhury

Nov 4, 2018 · 3 min read

A ndroid has multiple ways to manage Manage REST API. Using some awesome libraries are making it more efficient and awesome. Read the full article and full app source code available on Github.

  1. Okhttp3
  2. Retrofit2
  3. RxJava
  4. RxAndroid
  5. Gson

Add Dependent Libraries and Permission

Now, to use Okhttp3, Retrofit2, RxJava, RxAndroid, and Gson you’ll need to add the library to your gradle. Add the followings to your build.gradle(Module:app)

OkHttp to make Network Requests

OkHttp offers a request/response API that ma k es developers life easier. It supports synchronous and asynchronous calls. Even better, OkHttp is also available for Java projects with Java 7 as a requirement. Besides, OkHttp has a great mechanism to manage common connection problems. And now, it supports also WebSocket.

Retrofit Client Builder

Retrofit is a type-safe HTTP client for Android. With Retrofit, we can compose the HTTP connection easily through a simple expressive interface just like an API document. Besides the elegant syntax it provides, it’s also easy to incorporate with other libraries. The interesting fact is POST and GET request the Retrofit.Builder() is same.

Create an interface class where @POST(“”) annotation is define request type and inside parameter is your suffix of request URL. @QUERY() annotation is request header for you can use it for Authentication. @BODY annotation is data body. Using GSON data class will be convert in JSON format.

Create an interface class where @GET(“”) annotation is define request type. And @QUERY(“”) is bind request data with your URL.

Parse JSON to data class using GSON

We used Google GSON library to parse JSON to Kotlin data class. @SerializedName(“”) annotation. This is used when the property name in the Kotlin class does not match the field name in JSON. In real API sometime objects are optional. @Expose(deserialize = false) for make a filed optional.

Subscribe to the Observable

With the lambda expressions in Kotlin it’s super easy and clean way to subscribe and grab the data or handle the error. If we want to follow the onNext(), onError() and onComplete() pattern of Subscriber, than we can use RxKotlin which is an extensions for RxJava. Retrofit.Builder is lazy process manage observable with it. On .subscribe is return the result data class.

H opes you learn something, either a little Okhttp3, Retrofit2, Gson, and Rxjava2, Oh yes, you could get the code from github.

Источник

OkHttp¶

HTTP is the way modern applications network. It’s how we exchange data & media. Doing HTTP efficiently makes your stuff load faster and saves bandwidth.

OkHttp is an HTTP client that’s efficient by default:

  • HTTP/2 support allows all requests to the same host to share a socket.
  • Connection pooling reduces request latency (if HTTP/2 isn’t available).
  • Transparent GZIP shrinks download sizes.
  • Response caching avoids the network completely for repeat requests.
Читайте также:  Tomtom one для андроид

OkHttp perseveres when the network is troublesome: it will silently recover from common connection problems. If your service has multiple IP addresses, OkHttp will attempt alternate addresses if the first connect fails. This is necessary for IPv4+IPv6 and services hosted in redundant data centers. OkHttp supports modern TLS features (TLS 1.3, ALPN, certificate pinning). It can be configured to fall back for broad connectivity.

Using OkHttp is easy. Its request/response API is designed with fluent builders and immutability. It supports both synchronous blocking calls and async calls with callbacks.

Get a URL¶

This program downloads a URL and prints its contents as a string. Full source.

Post to a Server¶

This program posts data to a service. Full source.

Further examples are on the OkHttp Recipes page.

Requirements¶

OkHttp works on Android 5.0+ (API level 21+) and Java 8+.

OkHttp depends on Okio for high-performance I/O and the Kotlin standard library. Both are small libraries with strong backward-compatibility.

We highly recommend you keep OkHttp up-to-date. As with auto-updating web browsers, staying current with HTTPS clients is an important defense against potential security problems. We track the dynamic TLS ecosystem and adjust OkHttp to improve connectivity and security.

OkHttp uses your platform’s built-in TLS implementation. On Java platforms OkHttp also supports Conscrypt, which integrates BoringSSL with Java. OkHttp will use Conscrypt if it is the first security provider:

The OkHttp 3.12.x branch supports Android 2.3+ (API level 9+) and Java 7+. These platforms lack support for TLS 1.2 and should not be used. But because upgrading is difficult, we will backport critical fixes to the 3.12.x branch through December 31, 2021.

Releases¶

Our change log has release history.

The latest release is available on Maven Central.

Snapshot builds are available. R8 and ProGuard rules are available.

Also, we have a bill of materials (BOM) available to help you keep OkHttp artifacts up to date and be sure about version compatibility.

MockWebServer¶

OkHttp includes a library for testing HTTP, HTTPS, and HTTP/2 clients.

The latest release is available on Maven Central.

GraalVM Native Image¶

Building your native images with Graal https://www.graalvm.org/ should work automatically. Please report any bugs or workarounds you find.

See the okcurl module for an example build.

Источник

Android-приложение с фактами о Чаке Норрисе на Kotlin

Факты о Чаке Норрисе — это интернет-феномен с шутливыми «фактами» о мастере боевых искусств и актёре Чаке Норрисе. «Факты» — это шутки о выносливости Норриса, его мужественности и статусе альфа-самца.

В этом уроке мы создадим собственное Android-приложение с фактами о Чаке Норрисе с помощью Kotlin. В качестве IDE мы будем использовать Android Studio. На этом примере вы сможете узнать, как выполнять запросы к сети на Kotlin и как использовать библиотеку OkHttp 3.

Факты будут получены из базы данных, состоящей из фактов о Чаке Норрисе, которая предлагает простой API для получения случайных фактов.

Добавление зависимости для OkHttp

Чтобы выполнять сетевые вызовы, мы будем использовать библиотеку OkHttp. Итак, нам нужно добавить зависимость OkHttp 3.10 в наш файл build.gradle :

Настройка Android Manifest

Также для выполнения сетевых вызовов, нам нужно добавить разрешение INTERNET в манифест нашего приложения:

Создание пользовательского интерфейса

Следующим шагом является создание пользовательского интерфейса нашего приложения. Мы будем использовать ConstraintLayout в качестве корневого компонента layout.

Читайте также:  Навител навигатор repack для андроид

Вверху нашего пользовательского интерфейса будет находиться ImageView с лицом Чака Норриса:

Затем мы добавляем TextView , в котором мы будем отображать факт о Чаке Норрисе. Для TextView определяем зависимость, которая располагает его чуть ниже ImageView . После этого добавляем кнопку, которая позволит пользователям загружать новый факт, запрашивая его из базы данных. Наконец, добавляем ProgressBar , который будет центрирован на экране.

В итоге получаем следующий layout для нашего пользовательского интерфейса:

Тестирование API

Перед написанием кода в MainActivity мы протестируем ответ, возвращаемый API базы данных. Мы будем обращаться по следующему адресу: https://api.icndb.com/jokes/random.

Этот веб-сервис случайным образом возвращает новый факт о Чаке Норрисе при каждом вызове. Введя URL-адрес в веб-браузер, вы получите следующий результат:

Итак, нам нужно будет спарсить JSON-ответ, чтобы добраться до свойства joke, в котором и содержится необходимый нам факт.

Написание кода на Kotlin для MainActivity

Теперь пришло время написать код для MainActivity . Мы определяем переменную, в которой храним URL конечной точки API, который мы собираемся вызвать. Затем мы создаем экземпляр объекта OkHttpClient .

В методе onCreate MainActivity нам просто нужно установить OnClickListener на кнопку, позволяющую пользователям загружать новые факты о Чаке Норрисе.

Обращение к API выполняется в специальном методе loadRandomFact . Мы отображаем ProgressBar непосредственно перед обращением к сети. Затем мы создаём объект Request с URL-адресом конечной точки в параметре.

После этого мы вызываем метод newCall на OkHttpClient , передавая в него Request в качестве параметра. Чтобы обработать ответ, мы вызываем метод enqueue с экземпляром Callback в параметре.

В методе onResponse мы получаем ответ и затем создаём JSONObject . Последний шаг — получить свойство joke объекта value. После этого мы можем отобразить факт о Чаке Норриме в TextView , инкапсулировав всё в блок runOnUiThread , чтобы быть уверенным, что обновление пользовательского интерфейса будет выполнено в потоке пользовательского интерфейса.

В итоге получаем следующий код для MainActivity нашего Android-приложения:

Запускаем приложение

Лучшая часть урока. Когда запустите приложение, вы получите следующий результат:

Источник

OkHttp, HTTP-клиент Android от Square

Большинству приложений необходимы сетевые подключения к внешним службам для доступа и обмена данными. Обычно это происходит через API REST и HTTP-клиент в вашем приложении. OKHttp — это клиентская HTTP-библиотека Android от Square, которая сокращает количество необходимых шагов и позволяет уделять больше времени важным областям вашего приложения.

Почему OkHttp?

Это простая библиотека для использования, загрузка данных быстрее и экономия полосы пропускания. Это устраняет необходимость в тестировании сети, восстановлении после распространенных проблем с подключением и при сбое подключения OkHttp может повторить запрос с другим маршрутом.

OkHttp поддерживает Android 2.3 и выше, что составляет более 99% рынка, основываясь на текущей статистике использования версий.

Использование OkHttp в вашем приложении

OkHttp недавно обновлен до версии 3.0 и в настоящее время имеет версию 3.3.1. Я упоминаю об этом, потому что OkHttp сделал ключевые обновления в этой версии, а методы из предыдущих версий устарели.

Вы можете найти все примеры, которые я расскажу на GitHub .

Добавить зависимости

Откройте build.gradle (Module: app) и добавьте следующую зависимость или проверьте сайт OkHttp на наличие последних обновлений.

В AndroidManifest.xml добавьте интернет-разрешение.

Сеть с OkHttp

Основное внимание в этой статье будет уделено построению следующих сетевых вызовов.

  • ПОЛУЧИТЬ
  • ПОЧТА
  • Загрузка файлов с помощью OkHttp
  • Мониторинг запросов и ход выполнения ответов
  • Обрабатывать куки с OkHttp

Примечание : я стараюсь писать не избыточный код, а СУХОЙ код. Я чувствую, что сделал все возможное, чтобы оптимизировать работу моего кода с помощью OkHttp. Это состоит из структурирования кода на два класса. ApiCall RequestBuilder RequestBody

сетей

Пришло время создать некоторые вызовы API , в частности сетевые запросы GET и POST. Создайте следующий класс Java для обработки каждого из запросов.

Читайте также:  Пульт управления телевизор android

В обоих методах класса ApiCall OkHttpClient Вы можете конструировать методы по-разному, так что каждый раз создается новый клиент, но это не разумное решение, и я рекомендую вам прочитать этот ответ StackOverflow , чтобы доказать, что это лучшее решение.

В обоих методах параметр URL HttpUrl url Он представлен как экземпляр HttpUrl String

Вы можете применить это в обоих методах, и это будет иметь тот же результат, что и экземпляр HttpUrl Важно отметить, что строка URL может быть неправильно структурирована, что может привести к исключению MalformedURLException .

Последнее, что следует упомянуть, это RequestBody POST Он представляет собой набор параметров в парах имя / значение, отправленных в теле запроса POST

Создание запроса URL

Затем вам нужно создать класс Java, который создает URL-адрес сетевого запроса и RequestBody POST

Java-класс RequestBuilder RequestBody HttpUrl Примеры состоят из создания RequestBody HttpUrl

Вернуться к деятельности

До сих пор необходимо подготовить способ работы с сетью из действия и использовать созданные классы. Сначала в классе действия создайте глобальный OkHttpClient

Инициализируйте клиента в onCreate()

Вы должны обрабатывать сетевые вызовы в Android асинхронно, в противном случае выдается исключение NetworkOnMainThreadException, когда приложение пытается выполнить сетевую операцию в главном потоке. Чтобы избежать этого исключения, используйте AsyncTask .

Добавьте эти методы в свою активность:

Две функции, показанные здесь, представляют оба примера в классе RequestBuilder Они только для демонстрационных целей, и вы могли бы конструировать их по-другому.

Оставляя в стороне реализацию AsyncTask Весь код, реализованный в обоих предыдущих классах, структурирован в одну строку, которая возвращает тело ответа сетевого запроса, а избыточный код отсутствует. Довольно круто!

После получения ответа может потребоваться некоторый анализ, поскольку API обычно возвращают потоки JSON XML

Загрузка файлов

В этом разделе я расскажу о загрузке файлов с помощью OkHttp Один из распространенных типов загрузки — multipart/form-data В следующем примере загрузки изображения показано, как OkHttp может справиться с этим, но он действителен для других типов файлов.

Эта функция возвращает объект MultipartBody RequestBody RequestBuilder

Теперь, когда тело запроса на загрузку завершено, как выполнить вызов на загрузку? Загрузки — это вызовы POST

Не забудьте назвать это асинхронно. Этот вызов возвращает подтверждение действия загрузки, успешно или нет.

Что дальше

Это все для основ OkHttp, но далее я упомяну некоторые советы и инструменты, которые могут быть полезны с OkHttp.

Мониторинг хода выполнения запроса

Часто при загрузке мультимедиа полезна возможность отслеживать прогресс. Некоторое время назад я нашел это решение Gist, которое является решением этой проблемы. Чтобы отслеживать ход выполнения запроса с этим решением, вы создаете экземпляр RequestBody

Я изменил код для использования его с OkHttp 3. Вот ссылка на класс в GitHub с соответствующими изменениями.

Обрабатывать Cookies с OkHttp

Вы можете обрабатывать куки в OkHttp с CookieJar Следующий пример является примером того, как обрабатывать куки в OkHttp.

Для обработки файлов cookie на основе указанных политик в классе CookieStore OkHttpClient

Теперь вы обновили OkHttpClient CookieStore

Этого примера достаточно для сеансовых файлов cookie, но для тех, кто хочет сохранить файлы cookie при последующих запусках приложения, этой политики недостаточно. Существует решение этой проблемы с помощью реализации PersistentCookieJar, основанной на SharedPreferences Чтобы использовать этот пакет с OkHttpClient инструкциям по использованию .

Все ок?

В этой статье я рассмотрел начало работы с OkHttp и поделился советом, который может пригодиться при работе с ним. Я надеюсь, что вы найдете, что библиотека экономит ваше время и хотела бы знать, что вы создаете с ее помощью.

Источник

Оцените статью