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<WeatherData> callback = new Callback<WeatherData>() { @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 г.