Каждому Android-разработчику рано или поздно приходится работать с сетью. В Android есть множество библиотек с открытым исходным кодом, таких как Retrofit, OkHttp или, например, Volley, на которой мы сегодня остановимся подробнее.
Итак, что же эта библиотека из себя представляет?
Volley — это HTTP-библиотека, которая упрощает и ускоряет работу в сети для приложений Android.
Код библиотеки на GitHub .
Итак, для начала работы с Volley нам необходимо добавить её в build.gradle(module:app):
Также необходимо добавить разрешение на использование интернета в манифесте нашего приложения:
Далее нам понадобится API. В данном туториале я воспользуюсь погодным API с сайта openweathermap.org/api .
Пример данного API
Для начала создадим простую разметку для отображения данных, взятых из API (Application programming interface).
Далее заходим в MainActivity и создаем необходимые поля:
Инициализируем созданные поля поля в onCreate:
Теперь подходим к основной теме данного туториала — получение данных из API при помощи библиотеки Volley:
1) В MainActivity создаем метод GetWeather:
![image](https://habrastorage.org/r/w780q1/webt/ol/ct/rp/olctrpjcggivy3qzmi4j8wp-wog.jpeg)
для приведения json'а в нормальный вид использован jsonformatter
Стоит заметить, что имена объектов должны быть записаны точно так же, как и в нашем API, иначе они просто не 'достанутся'.
2) Создаем, непосредственно, метод setValues:
3) Вызываем методы getWeather() и setValues() в onCreate():
4) Запускаем приложение и… готово!
![image](https://habrastorage.org/r/w1560/webt/pn/ql/9v/pnql9vipzzp-lnj7ajd5e70kojk.png)
P.S: Несколько полезных ссылок для желающих более глубоко разобраться в вопросе:
Официальная документация библиотеки Volley
Для лучшего понимания сути API
Типы HTTP-запросов
Запись данных в формате JSON
P.S.S.: Файлы приложения на GitHub
Итак, что же эта библиотека из себя представляет?
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, //GET - API-запрос для получение данных
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 (в фигурных скобках - объекты, в квадратных - массивы (JSONArray).
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); // добавляем запрос в очередь
}
![image](https://habrastorage.org/webt/ol/ct/rp/olctrpjcggivy3qzmi4j8wp-wog.jpeg)
для приведения json'а в нормальный вид использован jsonformatter
Стоит заметить, что имена объектов должны быть записаны точно так же, как и в нашем API, иначе они просто не 'достанутся'.
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](https://habrastorage.org/webt/pn/ql/9v/pnql9vipzzp-lnj7ajd5e70kojk.png)
P.S: Несколько полезных ссылок для желающих более глубоко разобраться в вопросе:
Официальная документация библиотеки Volley
Для лучшего понимания сути API
Типы HTTP-запросов
Запись данных в формате JSON
P.S.S.: Файлы приложения на GitHub