Android: Začínáme s Volley

Knihovnu Volley vyvinula společností Google. Slouží pro rychlou a snadnou komunikaci přes internet v systému Android. Dnes si ukážeme jak Volley používám pro stahování dat z internetu. Především stahování dat z REST API.

Do knihovny Volley přispěl svým kódem můj kolega Zdeněk Kořán 🙂

Gradle v Android Studiu

Pro všechny mé projekty pro Android používám Android Studio. Je to ideální volba. Zprovoznění simulátoru a nainstalování SDK (oproti Eclipse) je velice jednoduché a příjemné.

Gradle je nástroj pro automatizaci. Slouží k: build, CI, deployment, generování dokumentace, … Po vytvoření nového projektu v Android Studio je Gradle výchozí nástroj.

Přidání Volley knihovny do projektu v Android Studiu

Vytvořte v Android Studio nový projekt. Otevřete soubor build.gradle do kterého doplníme závislost:

// /app/build.gradle
// ...

dependencies {
  // ...
  compile 'com.mcxiaoke.volley:library:1.0.+'
}

Lepší je načíst poslední verzi knihovny Volley: File -> Project Structure… -> app -> Dependencies -> Add -> Library dependency kde v modálním okně vyhledáme „com.mcxiaoke.volley:library“ kterou přidáte. Hotovo 🙂

Soubor build.gradle pak vypadá takto:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "cz.vencax.beerdroid.beerdroid"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.mcxiaoke.volley:library:1.0.+'
}

Použití Volley knihovny

Volley knihovnu již máme naimportovanou. Pojďme ji začít používat k stahování obsahu z internetu. Kdybychom nepoužili Volley museli bychom obsah stahovat v samostatném vlákně přes AsyncTask. S Volley to je jednoduché. Volley pro požadavky ke stažení používá Request Queue. Pro globální frontu požadavků si vytvoříme statickou třídu VolleySingleton.

VolleySingleton.java:

import android.content.Context;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

public class VolleySingleton {

    private static VolleySingleton mInstance;
    private RequestQueue mRequestQueue;
    private static Context mCtx;

    private VolleySingleton(Context context) {
        mCtx = context;
        mRequestQueue = getRequestQueue();
    }

    public synchronized static VolleySingleton getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new VolleySingleton(context);
        }
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            // getApplicationContext() is key, it keeps you from leaking the
            // Activity or BroadcastReceiver if someone passes one in.
            mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
        }
        return mRequestQueue;
    }
}

Přidáme oprávnění pro přístup na internet (<uses-permission android:name=„android.permission.INTERNET“ />):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cz.vencax.beerdroid.beerdroid" >

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

</manifest>

 Stažení JSONu přes Volley

Nyní máme vše připraveno a můžeme začít stahovat obsah z internetu přes Volley.

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> volley
        JsonObjectRequest request = new JsonObjectRequest("http://cblunt.github.io/blog-android-volley/response.json", null,
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_SHORT).show();
                    }
                },

                new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), "EROOR: " + error.toString(), Toast.LENGTH_SHORT).show();
                    }
                }
        );

        VolleySingleton volleySingleton = VolleySingleton.getInstance(getApplicationContext());

        volleySingleton.getRequestQueue().add(request);
        // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< volley
    }

Jak sami vidíte, s knihovnou Volley je stahování zdrojů z internetu velice jednoduché a rychlé. Sám Google ji používá u svých služeb (Google Play, Youtube, …), nemusíte se tudíž bát že Vaši aplikaci zpomalí.

Mne tato knihovna ušetřila spousty vlasů na hlavě 🙂

Na co si dát pozor

U JSONu se rozlišují 2 typy. Pozor na to při requestu.

JSONObject

začíná znakem {

JSONArray

začíná znakem [