Retrofit by Square определяет себя как

Типобезопасный HTTP-клиент для Android и Java

По сути, он анализирует ответы JSON от веб-API. Что нам нужно сделать, так это создать POJO (простой старый объект Javascript) для получения всего проанализированного объекта. Итак, мы собираемся заняться некоторыми основными фундаментальными проблемами, связанными с ПЕРЕОБОРУДОВАНИЕМ.

Основное требование:

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

compile ‘com.squareup.retrofit:retrofit:1.9.0’

минимальная необходимая версия - 2.3

Добавить в манифест

<uses-permission android:name=”android.permission.INTERNET”/>

Поскольку мы имеем дело с OPENWEATHER API, мы будем использовать REST API.

Http://api.openweathermap.org/data/2.5/forecast?lat=55.5&lon=37.5&cnt=10&appid=API_KEY

Здесь JSON, возвращенный после запроса веб-API:

{“city”:{“id”:495260,”name”:”Shcherbinka”,”coord”:{“lon”:37.559719,”lat”:55.499722},”country”:”RU”,”population”:0,”sys”:{“population”:0}},”cod”:”200",”message”:0.0157,”cnt”:10,”list”:[{“dt”:1445396400,”main”:{“temp”:266.89,”temp_min”:265.518,”temp_max”:266.89,”pressure”:1023.88,”sea_level”:1045.3,”grnd_level”:1023.88,”humidity”:81,”temp_kf”:1.38},”weather”:[{“id”:800,”main”:”Clear”,”description”:”sky is clear”,”icon”:”01n”}],”clouds”:{“all”:0},”wind”:{“speed”:2.02,”deg”:120.501},”snow”:{},”sys”:{“pod”:”n”},”dt_txt”:”2015–10–21 03:00:00"},{“dt”:1445407200,”main”:{“temp”:270.12,”temp_min”:269.084,”temp_max”:270.12,”pressure”:1023.85,”sea_level”:1045.11,”grnd_level”:1023.85,”humidity”:80,”temp_kf”:1.03},”weather”:[{“id”:800,”main”:”Clear”,”description”:”sky is clear”,”icon”:”01d”}],”clouds”:{“all”:0},”wind”:{“speed”:1.76,”deg”:136.502},”snow”:{“3h”:0.0005},”sys”:{“pod”:”d”},”dt_txt”:”2015–10–21 06:00:00"},{“dt”:1445418000,”main”:{“temp”:276.01,”temp_min”:275.325,”temp_max”:276.01,”pressure”:1023.71,”sea_level”:1044.53,”grnd_level”:1023.71,”humidity”:71,”temp_kf”:0.69},”weather”:[{“id”:800,”main”:”Clear”,”description”:”sky is clear”,”icon”:”01d”}],”clouds”:{“all”:0},”wind”:{“speed”:2.31,”deg”:162.001},”snow”:{},”sys”:{“pod”:”d”},”dt_txt”:”2015–10–21 09:00:00"},{“dt”:1445428800,”main”:{“temp”:276.51,”temp_min”:276.165,”temp_max”:276.51,”pressure”:1022.1,”sea_level”:1042.81,”grnd_level”:1022.1,”humidity”:67,”temp_kf”:0.34},”weather”:[{“id”:800,”main”:”Clear”,”description”:”sky is clear”,”icon”:”01d”}],”clouds”:{“all”:0},”wind”:{“speed”:3.12,”deg”:166.001},”snow”:{},”sys”:{“pod”:”d”},”dt_txt”:”2015–10–21 12:00:00"},{“dt”:1445439600,”main”:{“temp”:272.598,”temp_min”:272.598,”temp_max”:272.598,”pressure”:1021.11,”sea_level”:1042.01,”grnd_level”:1021.11,”humidity”:64,”temp_kf”:0},”weather”:[{“id”:800,”main”:”Clear”,”description”:”sky is clear”,”icon”:”01n”}],”clouds”:{“all”:0},”wind”:{“speed”:2.97,”deg”:154.501},”snow”:{},”sys”:{“pod”:”n”},”dt_txt”:”2015–10–21 15:00:00"},{“dt”:1445450400,”main”:{“temp”:270.615,”temp_min”:270.615,”temp_max”:270.615,”pressure”:1020.31,”sea_level”:1041.31,”grnd_level”:1020.31,”humidity”:74,”temp_kf”:0},”weather”:[{“id”:800,”main”:”Clear”,”description”:”sky is clear”,”icon”:”01n”}],”clouds”:{“all”:0},”wind”:{“speed”:3.37,”deg”:157.504},”snow”:{},”sys”:{“pod”:”n”},”dt_txt”:”2015–10–21 18:00:00"},{“dt”:1445461200,”main”:{“temp”:269.271,”temp_min”:269.271,”temp_max”:269.271,”pressure”:1020.01,”sea_level”:1041.01,”grnd_level”:1020.01,”humidity”:82,”temp_kf”:0},”weather”:[{“id”:800,”main”:”Clear”,”description”:”sky is clear”,”icon”:”01n”}],”clouds”:{“all”:0},”wind”:{“speed”:3.23,”deg”:168.5},”snow”:{},”sys”:{“pod”:”n”},”dt_txt”:”2015–10–21 21:00:00"},{“dt”:1445472000,”main”:{“temp”:267.998,”temp_min”:267.998,”temp_max”:267.998,”pressure”:1019.2,”sea_level”:1040.36,”grnd_level”:1019.2,”humidity”:86,”temp_kf”:0},”weather”:[{“id”:800,”main”:”Clear”,”description”:”sky is clear”,”icon”:”01n”}],”clouds”:{“all”:0},”wind”:{“speed”:3.07,”deg”:167.008},”snow”:{},”sys”:{“pod”:”n”},”dt_txt”:”2015–10–22 00:00:00"},{“dt”:1445482800,”main”:{“temp”:267.049,”temp_min”:267.049,”temp_max”:267.049,”pressure”:1018.26,”sea_level”:1039.39,”grnd_level”:1018.26,”humidity”:93,”temp_kf”:0},”weather”:[{“id”:800,”main”:”Clear”,”description”:”sky is clear”,”icon”:”01n”}],”clouds”:{“all”:0},”wind”:{“speed”:3.01,”deg”:162.004},”snow”:{},”sys”:{“pod”:”n”},”dt_txt”:”2015–10–22 03:00:00"},{“dt”:1445493600,”main”:{“temp”:269.142,”temp_min”:269.142,”temp_max”:269.142,”pressure”:1017.69,”sea_level”:1038.68,”grnd_level”:1017.69,”humidity”:79,”temp_kf”:0},”weather”:[{“id”:800,”main”:”Clear”,”description”:”sky is clear”,”icon”:”02d”}],”clouds”:{“all”:8},”wind”:{“speed”:3.2,”deg”:162.501},”snow”:{},”sys”:{“pod”:”d”},”dt_txt”:”2015–10–22 06:00:00"}]}

Вот ссылка на POJO: https://gist.github.com/rohitsthaa/62f900e84b5471dfc86f

Теперь мы должны создать интерфейс для взаимодействия с веб-API для операций POST, GET:

public class APIManager {
private static Mc2Service mc2Service;
private static final String URL = “http://api.openweathermap.org/data/2.5";
public interface Mc2Service {
@GET(“/forecast”)
void getWeatherInfo (@Query(“lat”) String latitude,
@Query(“lon”) String longitude,
@Query(“cnt”) String cnt,
@Query(“appid”) String appid,
Callback<WeatherData> cb);
}
public static Mc2Service getApiService () {
RestAdapter restAdapter = new RestAdapter.Builder().
setEndpoint(URL).build();
mc2Service = restAdapter.create(Mc2Service.class);
return mc2Service;
}
}

Аннотация @Get используется для определения относительного пути и метода URL-адреса HTTP. Хотя @Queryannotation используется для определения строки запроса для обсуждаемого URL. Обратный вызов относится к результату запроса, который будет сохранен, в каком классе

Теперь доступ к интерфейсу осуществляется в основном действии:

APIManager.getApiService().getWeatherInfo(
Double.toString(location.getLatitude()),
Double.toString(location.getLongitude()),
“10”,
“API_KEY”,
callback);

Это метод обратного вызова, который помогает получить данные, анализируемые Retrofit.

private Callback&lt;WeatherData&gt; callback = new Callback&lt;WeatherData&gt;() {
@Override
public void success (WeatherData response, Response response2) {
String text = response.getCity().getName() + “ : “ + response.getList().get(0).getWeather().get(0).getIcon() ;
retrofitText.setText(text);
Log.w(“icon”, response.getList().get(0).getWeather().get(0).getIcon());
if (response.getList().get(0).getWeather().get(0).getIcon().equals(“10d”)) {
WeatherIcon.setImageResource(R.drawable.lightrain);
}
pd.cancel();
}
@Override
public void failure (RetrofitError error) {
retrofitText.setText(“Retrofit error”);
pd.cancel();
Log.d(TAG, “failure”, error);
}
};

Давайте сделаем наше приложение более интерактивным

Использование значка OpenWeather

Проверьте эту ссылку : http: //openweathermap.org/weather-conditions

Openweather предоставляет набор значков для различных погодных условий. так почему бы не использовать это.

Вы можете загрузить шрифт значка погоды с https://erikflowers.github.io/weather-icons/, который предоставляет другой набор значков, что довольно удивительно.

Загрузите файл шрифта и поместите его в папки Assests

Теперь мы можем легко использовать шрифт

Приведенный выше код помогает нам использовать собственный шрифт для нашего приложения.

Private Typeface WeatherFont;
weatherFont = Typeface.createFromAsset(getAssets(), PATH_TO_WEATHER_FONT);
weather_icon.setTypeface(weatherFont);

Вы можете найти проект по адресу: https://github.com/rohitsthaa/retrofit-openweather

Первоначально опубликовано на сайте shrestharohit.com.np 24 октября 2015 г.