Как сделать запрос на api сервер через java

178
16 апреля 2019, 07:40

Необходимо получить информацию о курсе валют , на сайте банка есть api в формате json нужно как получить себе в приложение. http://www.nbrb.by/APIHelp/ExRates - может кто может глянуть и помочь ?

Answer 1

Прогоните адрес http://www.nbrb.by/API/ExRates/Currencies/{Cur_ID} через Postman или другое (возможно онлайновое) средство для получения JSON ответов на запросы. Полученный результат с помощью http://www.jsonschema2pojo.org/ преобразуйте в Java-модель.

Для начала не забудьте в app/build.gradle добавить следующие зависимости

implementation 'com.google.code.gson:gson:2.8.0'
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'

Все модели кладёте в папку model.

Создаёте папку network, и туда кладёте сервис и фабрику.

Код фабрики:

//Импортируем необходимые классы
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
//Объявляем фабрику - только статичные поля и методы
public class ApiFactory {
    private static final String ROOT_URL = "http://www.nbrb.by/API/ExRates";
    static Retrofit buildRetrofit() {
        return new Retrofit.Builder()
                .baseUrl(ROOT_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    public static ApiService getService() {
        return buildRetrofit().create(ApiService.class);
    }
}

Код сервиса:

//Импортируйте получившиеся у Вас в JSON-POJO модели
import com.YOUR_BRAND.YOUR_APP_NAME.model.Currency;
import com.YOUR_BRAND.YOUR_APP_NAME.model.Rate;
import com.YOUR_BRAND.YOUR_APP_NAME.model.Dynamics;
//В данном случае они должны быть в папке model вашего проекта
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.Headers;
public interface ApiService {
    @Headers("Content-Type: application/json")
    @GET("/Currencies/{id}") 
    Call<Currency> getCurrency(
        @Path("id") String code)
    @Headers("Content-Type: application/json")
    @GET("/Rates/{id}") 
    Call<Rate> getRate(
        @Path("id") String code,
        @Query("onDate") String onDate,
        @Query("Periodicity") String periodicity,
        @Query("ParamMode") String paramMode)
    @Headers("Content-Type: application/json")
    @GET("/Rates/Dynamics/{id}") 
    Call<Dynamics> getDynamics(
        @Path("id") String code,
        @Query("startDate") String startDate,
        @Query("endDate") String endDate)
}

Для отправки запроса и получения результата там где нужно (например в MainActivity) используете следующий код (на примере запроса валюты, два других запроса напишете по аналогии):

Call<Currency> call = ApiFactory.getService().getCurrency("1"); //или другой код валюты
call.enqueue(new Callback<Currency>() {
    @Override
    public void onResponse(Call<Currency> call, Response<Currency> response) {
        if (response.isSuccessful()) {
            //Действия, если запрос прошёл
            //Доступ к ответу на запрос - response.body().getData()
            //он имеет класс Currency
        } else {
            //действия, если запрос не прощёл
            Log.d("myLogs", ErrorUtils.errorMessage(response));
        }
    }
    @Override
    public void onFailure(Call<Currency> call, Throwable t) {}
});

В папку network кладёте также классы ApiError и ErrorUtils. Возьмёте их здесь:

Как отправить POST запрос через Retrofit 2.0?

Если будут вопросы, пишите

READ ALSO
Пример из Spring4. Spring+Hibernate. org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;transactionManager&#39;

Пример из Spring4. Spring+Hibernate. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager'

Реализую пример из книги "Spring 4 для профессионалов" из главы "Использование Hibernate в Spring"Использую БД H2

182
Выделение из текста отдельных частей

Выделение из текста отдельных частей

Имею текст: "mech:type":"Car", "что-то":"ответ на что-то"

217
Ошибка при компиляции в IntelliJ IDEA [закрыт]

Ошибка при компиляции в IntelliJ IDEA [закрыт]

При компиляции вылазит такая ошибка, думал из за кодировки, все перепробывал не помогаетПомогите пожалуйста!

161
org.h2.jdbc.JdbcSQLException: Schema &ldquo;information_schema&rdquo; not found;

org.h2.jdbc.JdbcSQLException: Schema “information_schema” not found;

Решил гонять тесты через H2Аннотации над абстрактным тестом, от которого наследуются все остальные:

265