CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: carotix con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 7 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 31 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 1 su 1
Discussione:

[Facile] Esempio Volley

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiano


    Registrato dal
    Feb 2015
    Messaggi
    185

    Ringraziamenti
    2
    Ringraziato 14 volte in 14 Posts
    Predefinito

    [Facile] Esempio Volley

    Ho cercato molto nel web per realizzare il download di un file da web senza il tradizionale AsyncTask e HttpRequest (che uso peraltro in altre apps) che però credo di aver capito deprecata e poco affidabile.
    Ho cercato quindi di utilizzare la classe Volley che presenta parecchie novità in termini di facilitazione, sicurezza, organizzazione e opportunità.
    Il mio intento nella fattispecie era ottenere da web un oggetto (JSON per la precisione) e ci sono riuscito (cioè, funziona ).
    Lo voglio condividere e, data la mia breve esperienza in android, mi piacerebbe sapere dai più ferrati se è tutto corretto.

    step 1: rendere disponibile la classe Volley
    pare che le future linee guida di google prevedano di incorporare la classe nel proprio progetto (cosa facilmente ottenibile tramite il Git)
    io però ho preferito un approccio classico aggiungendo la dipendenza:
    codice:
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
    step 2: aggiungere al manifesto il consueto accesso a internet:
    codice:
    <uses-permission android:name="android.permission.INTERNET" />
    adesso le classi:
    step 3: CustomJSONObjectRequest.java che si occupa di fare la richiesta del file
    codice:
            import com.android.volley.AuthFailureError;
            import com.android.volley.Response;
            import com.android.volley.RetryPolicy;
            import com.android.volley.toolbox.JsonObjectRequest;
    
            import org.json.JSONObject;
    
            import java.util.HashMap;
            import java.util.Map;
    
    public class CustomJSONObjectRequest extends JsonObjectRequest {
    
        public CustomJSONObjectRequest(int method, String url, JSONObject jsonRequest,
                                       Response.Listener<JSONObject> listener,
                                       Response.ErrorListener errorListener) {
            super(method, url, jsonRequest, listener, errorListener);
        }
    
          @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json; charset=utf-8");
            return headers;
        }
    
          @Override
        public RetryPolicy getRetryPolicy() {
            return super.getRetryPolicy();
        }
    }
    step 4: CustomVolleyRequestQueue.java che si occupa di incalanare la coda delle richieste
    codice:
          import android.content.Context;
    
            import com.android.volley.Cache;
            import com.android.volley.Network;
            import com.android.volley.RequestQueue;
            import com.android.volley.toolbox.BasicNetwork;
            import com.android.volley.toolbox.DiskBasedCache;
            import com.android.volley.toolbox.HurlStack;
    
    public class CustomVolleyRequestQueue {
    
        private static CustomVolleyRequestQueue mInstance;
        private static Context mCtx;
        private RequestQueue mRequestQueue;
    
        private CustomVolleyRequestQueue(Context context) {
            mCtx = context;
            mRequestQueue = getRequestQueue();
        }
    
        public static synchronized CustomVolleyRequestQueue getInstance(Context context) {
            if (mInstance == null) {
                mInstance = new CustomVolleyRequestQueue(context);
            }
            return mInstance;
        }
    
        public RequestQueue getRequestQueue() {
            if (mRequestQueue == null) {
                Cache cache = new DiskBasedCache(mCtx.getCacheDir(), 10 * 1024 * 1024);
                Network network = new BasicNetwork(new HurlStack());
                mRequestQueue = new RequestQueue(cache, network);
                mRequestQueue.start();
            }
            return mRequestQueue;
        }
    }
    step 5: il codice che fa la richiesta nella Main Activity
    codice:
    mQueue = CustomVolleyRequestQueue.getInstance(this.getApplicationContext()).getRequestQueue();
    String url = "urldelfiledascaricare";
    final CustomJSONObjectRequest jsonRequest = new CustomJSONObjectRequest(Request.Method.GET, url, new JSONObject(), this, this);
    mQueue.add (jsonRequest);
    step 6: gestione della risposta
    codice:
       @Override
        public void onResponse(Object response) {
            try {
                //fai quello che ti pare con l'oggetto 'response' ottenuto
               } catch (JSONException e){
                e.printStackTrace();
            }
    Successivamente, per la mia app, ho fatto il parsing dell'oggetto.
    La classe Volley consente di scaricare di tutto: oggetti, array, immagini e gestisce le richieste autonomamente le quali possono essere anche cancellate ... insomma un sacco di roba https://developer.android.com/traini...ley/index.html

    Scusatemi se ho usato termini non esattamente tecnici e grazie a tutto il forum dal quale attingo ogni giorno
    Ultima modifica di NewBlackMamba; 07-10-15 alle 22:18

  2. Il seguente Utente ha ringraziato NewBlackMamba per il post:

    Crotan (10-10-15)

  3.  

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy