Android – Volley Library Example
Вольный перевод одноименной статьи Paresh Mayani.
Я уверен вы, еще не слышали слово "Volley", это библиотека, представленная на Google I/O 2013 Ficus Kirkpatrick.
Для чего библиотека Volley?
Volley это библиотека, которая делает сетевые приложения для Android проще и, самое главное, быстрее.
Она управляет обработкой и кэшированием сетевых запросов, и это экономит драгоценное время разработчиков от написания одного и того же кода сетевого запроса/считывания из кэша снова и снова. И еще одно преимущество, меньше кода, меньше количество ошибок :)
Обычно мы пишем один и тот же код сетевого запроса в AsyncTask, логику обработки ответа от Web API и отображения его в View. Мы должны заботиться об отображении ProgressBar/ProgressDialog внутри OnPreExecute() и OnPostExecute(). Я знаю, что это не трудная задача, но все же рутинная. Иногда бывает скучно, даже когда определен базовый класс для управления ProgressBar/ProgressDialog и многими другими вещами. Так что теперь можно сказать, Volley может быть мощной альтернативой AsyncTask.
Преимущества использования Volley:
- Volley автоматически составляет все сетевые запросы. Это означает, что Volley будет принимать на себя все сетевые запросы вашего приложения выполнять их для извлечения ответа или изображения с веб-сайтов.
- Volley обеспечивает прозрачность дискового кэширования и кэширования в памяти.
- Volley обеспечивает мощное API для отмены запроса. Это означает, что можно отменить один запрос или установить несколько запросов для отмены.
- Volley предоставляет мощные возможности изменения.
- Volley предоставляет инструменты отладки и трассировки.
Как начать?
- Клонируйте проект Volley.
git clone https://android.googlesource.com/platform/frameworks/volley
- Импортируйте код в ваш проект.
2 главных класса Volley
Есть 2 основных класса:
- Request queue
- Request
Request queue: используется для отправки сетевых запросов, можете создавать класс request queue, где хотите, но, как правило его создают во время запуска и используют как Singleton.
Request: он содержит все необходимые детали для создания вызова Web API. Например: какой метод использовать (GET или POST), данные запроса, response listener, error listener.
Взгляните на метод JSONObjectRequest:
/** * Creates a new request. * @param method the HTTP method to use * @param url URL to fetch the JSON from * @param jsonRequest A {@link JSONObject} to post with the request. Null is allowed and * indicates no parameters will be posted along with request. * @param listener Listener to receive the JSON response * @param errorListener Error listener, or null to ignore errors. */ public JsonObjectRequest(int method, String url, JSONObject jsonRequest, Listenerlistener, ErrorListener errorListener) { super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, errorListener); } /** * Constructor which defaults to GET
ifjsonRequest
is *null
,POST
otherwise. * * @see #JsonObjectRequest(int, String, JSONObject, Listener, ErrorListener) */ public JsonObjectRequest(String url, JSONObject jsonRequest, Listenerlistener, ErrorListener errorListener) { this(jsonRequest == null ? Method.GET : Method.POST, url, jsonRequest, listener, errorListener); }
Простой пример использования Volley:
Я надеюсь вы уже клонировали/скачали библиотеку Volley из Git репозитория. Теперь следуйте инструкциям, что бы создать простой пример извлечения JSON ответа.
Шаг 1: Убедитесь что вы импортировали проект Volley в Eclipse. Теперь после импорта мы должны сделать проект библиотекой (Library project), правой кнопкой мыши => Properties => Android (левая панель).
Шаг 2: Создайте новый проект VolleyExample.
Шаг 3: Правый клик на VolleyExample и включите библиотеку Volley в ваш проект.
Шаг 4: Включите разрешение на использование интернета в файле AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
Шаг 5:
5.1 Создайте объект класса RequestQueue
RequestQueue queue = Volley.newRequestQueue(this);
5.2 Создайте JSONObjectRequest с response и error listener.
String url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyBmSXUzVZBKQv9FJkTpZXn0dObKgEQOIFU&cx=014099860786446192319:t5mr0xnusiy&q=AndroidDev&alt=json&searchType=image"; JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener() { @Override public void onResponse(JSONObject response) { // TODO Auto-generated method stub txtDisplay.setText("Response => "+response.toString()); findViewById(R.id.progressBar1).setVisibility(View.GONE); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO Auto-generated method stub } });
5.3 Добавьте ваш request в RequestQueue.
queue.add(jsObjRequest);
Весь код файла MainActivity.java
package com.technotalkative.volleyexamplesimple; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.TextView; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.Volley; public class MainActivity extends Activity { private TextView txtDisplay; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txtDisplay = (TextView) findViewById(R.id.txtDisplay); RequestQueue queue = Volley.newRequestQueue(this); String url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyBmSXUzVZBKQv9FJkTpZXn0dObKgEQOIFU&cx=014099860786446192319:t5mr0xnusiy&q=AndroidDev&alt=json&searchType=image"; JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener() { @Override public void onResponse(JSONObject response) { // TODO Auto-generated method stub txtDisplay.setText("Response => "+response.toString()); findViewById(R.id.progressBar1).setVisibility(View.GONE); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO Auto-generated method stub } }); queue.add(jsObjRequest); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
Полный код примера и библиотека Volley: https://github.com/PareshMayani/Android-Volley-Example
Видео презентация: Google I/O 2013 – Volley: Easy, Fast Networking for Android
Комментарии
Отправить комментарий