<MyRusakov.ru />

Программирование на C++ с Нуля до Гуру

Программирование на C++ с Нуля до Гуру

Данный курс научит Вас программировать на языке C++, который, несмотря на свой почтенный возраст, необычайно сильно востребован. Курс состоит из 6 разделов, посмотрев которые и выполнив все упражнения, Вы с нуля освоите этот язык и сможете создавать самые разные проекты любой сложности на C++.

Для закрепления материала из уроков к ним идёт множество упражнений.

Дополнительно к курсу идёт вспомогательная система, которая не даст Вам забросить начатое на полпути.

Также вместе с курсов Вы получаете Бонус "Программирование на C++ в Unreal Engine", в котором Вы научитесь создавать игры на C++ с использованием этого движка.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Зачем Вы изучаете программирование/создание сайтов?

Работа с сетью с помощью библиотеки Retrofit2 в Java

Работа с сетью с помощью библиотеки Retrofit2 в Java

Доброго времени суток! В данной статье я расскажу Вам о Java-библиотеке Retrofit2 и о том, как она упрощает работу с различными сетевыми API (прикладными интерфейсами). Итак, перейдем сразу к примеру.

Данная библиотека является одной из самых популярных библиотек при разработке Android-приложений.

Пример будет создаваться в среде разработки Intellij IDEA, для этого необходимо будет создать новый Java проект и через свойства проекта добавить две библиотеки, которые мы будем использовать далее. Обратите внимание, что для простоты, я не буду останавливаться на том, как создать проект в среде. Отмечу лишь то, что добавить библиотеки в проект можно, открыв путь File -> Project Structure -> Project Settings -> Libraries.

Библиотеки, которые нам нужны для проекта:


# сама библиотека 
com.squareup.retrofit2:retrofit:2.1.0

# конвертер формата JSON
com.squareup.retrofit2:converter-gson:2.1.0

После установки библиотек, они появятся в корне проекта в папке lib.. Далее создадим две папки - Java пакета:


# базовый пакет с классом Main
com.example.retrofit2

# будет содержать сервис для работы с API
com.example.retrofit2.network

# будет содержать модели, сгенерированные из JSON ответа сервиса
com.example.retrofit2.network.data

Структура папок проекта:


.
├── lib
│   ├── converter-gson-2.1.0.jar
│   ├── gson-2.7.jar
│   ├── okhttp-3.3.0.jar
│   ├── okio-1.8.0.jar
│   └── retrofit-2.1.0.jar
├── src
│   └── com
│       └── example
│           └── retrofit
│               ├── network
│               │   ├── data
│               │   │   ├── Post.java
│               │   │   └── User.java
│               │   ├── JSONPlaceHolderApi.java
│               │   └── ApiService.java
│               └── Main.java
└── Retrofit2_App.iml


Как будет строиться логика работы приложения? Для примера будем использовать сервис https://jsonplaceholder.typicode.com. Мы опишем JSON-ответы сервиса с помощью POJO (Plain Old Java Objects) объектов - простыми Java объектами. Библиотека Retrofit2 будет опрашивать сервис по указанным URL-адресам, конвертировать ответ в списки Java-объектов, с которыми мы уже будем работать. Итак, код классов далее.

Post.java


package com.example.retrofit.network.data;

public class Post {
    String userId;
    String id;
    String title;
    String body;

    public String getUserId() {
        return userId;
    }

    public Post setUserId(String userId) {
        this.userId = userId;
        return this;
    }

    public String getId() {
        return id;
    }

    public Post setId(String id) {
        this.id = id;
        return this;
    }

    public String getTitle() {
        return title;
    }

    public Post setTitle(String title) {
        this.title = title;
        return this;
    }

    public String getBody() {
        return body;
    }

    public Post setBody(String body) {
        this.body = body;
        return this;
    }

    @Override
    public String toString() {
        return "Post{" +
                "userId='" + userId + '\'' +
                ", id='" + id + '\'' +
                ", title='" + title + '\'' +
                ", body='" + body + '\'' +
                '}';
    }
}


User.java


package com.example.retrofit.network.data;

public class User {
    private String id;
    private String name;
    private String username;
    private String email;
    private String phone;
    private String website;

    public String getId() {
        return id;
    }

    public User setId(String id) {
        this.id = id;
        return this;
    }

    public String getUsername() {
        return username;
    }

    public User setUsername(String username) {
        this.username = username;
        return this;
    }

    public String getWebsite() {
        return website;
    }

    public User setWebsite(String website) {
        this.website = website;
        return this;
    }

    public String getName() {
        return name;
    }

    public User setName(String name) {
        this.name = name;
        return this;
    }

    public String getEmail() {
        return email;
    }

    public User setEmail(String email) {
        this.email = email;
        return this;
    }

    public String getPhone() {
        return phone;
    }

    public User setPhone(String phone) {
        this.phone = phone;
        return this;
    }



    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", username='" + username + '\'' +
                ", email='" + email + '\'' +
                ", phone='" + phone + '\'' +
                ", website='" + website + '\'' +
                '}';
    }
}


JSONPlaceHolderApi - описание сервиса

Через аннотацию @GET определяется URL-путь для запроса. Список объектов возвращается в специальной библиотечной обертке - классе Call, посредством которого и будут выполняться запросы - асинхронные или синхронные.


package com.example.retrofit.network;


import com.example.retrofit.network.data.Post;
import com.example.retrofit.network.data.User;
import retrofit2.Call;
import retrofit2.http.GET;

import java.util.List;

public interface JSONPlaceHolderApi {
    @GET("users")
    Call<List<User>> getUsers();

    @GET("posts")
    Call<List<Post>> getPosts();
}


NetworkService.java - конкретная реализация сервиса


package com.example.retrofit.network;

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class ApiService {
    private static ApiService mInstance;
    private static final String BASE_URL = "https://jsonplaceholder.typicode.com";
    private final Retrofit retrofit;

    private ApiService() {
        // создаем объект класса Retrofit
        retrofit = new Retrofit.Builder()
                // устанавливаем базовый URL-адрес
                .baseUrl(BASE_URL)
                // добавляем конвертер
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }

    /**
     * Объект-синглтон - если уже есть экземпляр объекта, то не создаем еще
     * а просто возвращаем
     * 
     * @return
     */
    public static ApiService getInstance() {
        if (mInstance == null) {
            mInstance = new ApiService();
        }
        return mInstance;
    }

    /**
     * Реализация интерфейса сервиса
     * 
     * @return
     */
    public JSONPlaceHolderApi getJSONApi() {
        return retrofit.create(JSONPlaceHolderApi.class);
    }
}


Main.java - сам главный класс


package com.example.retrofit;

import com.example.retrofit.network.ApiService;
import com.example.retrofit.network.JSONPlaceHolderApi;
import com.example.retrofit.network.data.Post;
import com.example.retrofit.network.data.User;
import retrofit2.Response;

import java.io.IOException;
import java.util.List;

public class Main {

    public static void main(String[] args) {

        ApiService service = ApiService.getInstance();
        JSONPlaceHolderApi serviceApi = service.getJSONApi();

        /*
         * синхронные запросы на сервис
         */
        try {
            Response<List<User>> users = serviceApi.getUsers().execute();
            Response<List<Post>> posts = serviceApi.getPosts().execute();

            users.body().forEach(System.out::println);
            posts.body().forEach(System.out::println);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}


После запуска данного примера Вы увидите в консоли, преобразованные к строке, представления Java-объектов с актуальными данными.

Таким образом, мы рассмотрели с Вами основы работы с библиотекой Retrofit2 и запроса данных с помощью аннотации @GET.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.