Необходимо получить информацию о курсе валют , на сайте банка есть api в формате json нужно как получить себе в приложение. http://www.nbrb.by/APIHelp/ExRates - может кто может глянуть и помочь ?
Прогоните адрес 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?
Если будут вопросы, пишите
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Реализую пример из книги "Spring 4 для профессионалов" из главы "Использование Hibernate в Spring"Использую БД H2
При компиляции вылазит такая ошибка, думал из за кодировки, все перепробывал не помогаетПомогите пожалуйста!
Решил гонять тесты через H2Аннотации над абстрактным тестом, от которого наследуются все остальные: