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:

  1. Volley автоматически составляет все сетевые запросы. Это означает, что Volley будет принимать на себя все сетевые запросы вашего приложения выполнять их для извлечения ответа или изображения с веб-сайтов.
  2. Volley обеспечивает прозрачность дискового кэширования и кэширования в памяти.
  3. Volley обеспечивает мощное API для отмены запроса. Это означает, что можно отменить один запрос или установить несколько запросов для отмены.
  4. Volley предоставляет мощные возможности изменения.
  5. Volley предоставляет инструменты отладки и трассировки.

Как начать?

  1. Клонируйте проект Volley.
    git clone https://android.googlesource.com/platform/frameworks/volley
  2. Импортируйте код в ваш проект.

2 главных класса Volley


Есть 2 основных класса:
  1. Request queue
  2. 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,
            Listener listener, ErrorListener errorListener) {
        super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
                    errorListener);
    }

    /**
     * Constructor which defaults to GET if jsonRequest is
     * null, POST otherwise.
     *
     * @see #JsonObjectRequest(int, String, JSONObject, Listener, ErrorListener)
     */
    public JsonObjectRequest(String url, JSONObject jsonRequest, Listener listener,
            ErrorListener errorListener) {
        this(jsonRequest == null ? Method.GET : Method.POST, url, jsonRequest,
                listener, errorListener);
    }

Простой пример использования Volley:


Я надеюсь вы уже клонировали/скачали библиотеку Volley из Git репозитория. Теперь следуйте инструкциям, что бы создать простой пример извлечения JSON ответа.

Шаг 1: Убедитесь что вы импортировали проект Volley в Eclipse. Теперь после импорта мы должны сделать проект библиотекой (Library project), правой кнопкой мыши => Properties => Android (левая панель).

volley as a library project

Шаг 2: Создайте новый проект VolleyExample.

Шаг 3: Правый клик на VolleyExample и включите библиотеку Volley в ваш проект.

Including volley library in Android project

Шаг 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

blog comments powered by Disqus
сюда туда