Использование библиотеки Volley в Android на примере получения данных из погодного API

от автора

Каждому Android-разработчику рано или поздно приходится работать с сетью. В Android есть множество библиотек с открытым исходным кодом, таких как Retrofit, OkHttp или, например, Volley, на которой мы сегодня остановимся подробнее.

Итак, что же эта библиотека из себя представляет?

Volley — это HTTP-библиотека, которая упрощает и ускоряет работу в сети для приложений Android.
Код библиотеки на GitHub .

Итак, для начала работы с Volley нам необходимо добавить её в build.gradle(module:app):

dependencies {     ...     implementation 'com.android.volley:volley:1.1.1' }

Также необходимо добавить разрешение на использование интернета в манифесте нашего приложения:

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

Далее нам понадобится API. В данном туториале я воспользуюсь погодным API с сайта openweathermap.org/api .

Пример данного API

Для начала создадим простую разметку для отображения данных, взятых из API (Application programming interface).

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context=".MainActivity">      <TextView         android:id="@+id/tempTextView"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="Температура: "         android:textSize="20sp"         android:layout_alignParentLeft="true"         android:layout_marginLeft="50dp"         android:layout_alignParentTop="true"         android:layout_marginTop="50dp"         />      <TextView         android:id="@+id/windTextView"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_alignParentLeft="true"         android:layout_marginLeft="50dp"         android:textSize="20sp"         android:layout_marginTop="10dp"         android:text="Скорость ветра:"         />  </RelativeLayout>

Далее заходим в MainActivity и создаем необходимые поля:

private static final String testUrl = "https://samples.openweathermap.org/data/2.5/weather?id=2172797&appid=b6907d289e10d714a6e88b30761fae22"; //url, из которого мы будем брать JSON-объект  RequestQueue mRequestQueue; // очередь запросов TextView tempTextView,windTextView; // текстовые поля для отображения данных double temp = 0,windSpeed = 0; // переменные для взятия данных из JSON 

Инициализируем созданные поля поля в onCreate:

tempTextView = findViewById(R.id.tempTextView); windTextView = findViewById(R.id.windTextView);  mRequestQueue = Volley.newRequestQueue(this); 

Теперь подходим к основной теме данного туториала — получение данных из API при помощи библиотеки Volley:

1) В MainActivity создаем метод GetWeather:

private void getWeather(String url) {         final JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, //получение данных                 url, null, new Response.Listener<JSONObject>() {             @Override             public void onResponse(JSONObject response) {                 try {                     JSONObject weather = response.getJSONObject("main"),wind = response.getJSONObject("wind"); //получаем JSON-обьекты main и wind                     temp = weather.getDouble("temp");                     windSpeed = wind.getDouble("speed");                     // присваеваем переменным соответствующие значения из API                     setValues(); // создадим метод setValues для присваивания значений переменным                 } catch (JSONException e) {                     e.printStackTrace();                 }             }         }, new Response.ErrorListener() { // в случае возникновеня ошибки             @Override             public void onErrorResponse(VolleyError error) {                 error.printStackTrace();             }         });          mRequestQueue.add(request); }

2) Создаем, непосредственно, метод setValues:

private void setValues() {         tempTextView.setText("Температура: " + temp);         windTextView.setText("Скорость ветра: " + windSpeed); } 

3) Вызываем getWeather() и setValues() в onCreate():

@Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          getWeather(testUrl);         setValues(); }

4) Запускаем приложение и… готово!

image

P.S: Несколько полезных ссылок для желающих более глубоко разобраться в вопросе:

Официальная документация библиотеки Volley
Для лучшего понимания сути API

P.S.S.: Файлы приложения на GitHub

ссылка на оригинал статьи https://habr.com/ru/post/495976/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *