2014-06-25 2 views
7

J'envoie une requête JSONArray GET avec Volley, et elle renvoie le tableau JSON spécifié. Voici ma demande:Parse réponse Android JSONArray Volley

JsonArrayRequest getRequest = new JsonArrayRequest(url, 
        new Response.Listener<JSONArray>() 
        { 
         @Override public void onResponse(JSONArray response) { 

          Log.d("Response", response.toString()); 
         } 
        }, 
        new Response.ErrorListener() 
        { 
         @Override public void onErrorResponse(VolleyError error) { 
          Log.d("Error.Response", error.toString()); 
         } 
        } 
       ); 
        VolleySingleton.getInstance(this).addToRequestQueue(getRequest); //Call to get dashboard feed 
} 

Comme vous pouvez le voir, je suis actuellement en train de déconnecter la réponse. Je veux analyser le tableau et afficher les résultats dans une vue de liste. La documentation pour ce n'est pas génial, et je suis assez vert en termes de dev Android. Quelle est la bonne façon d'analyser un tableau JSON de Volley et d'afficher les résultats dans une vue en liste? I've gathered que je devrais utiliser parseNetworkResponse, mais je ne sais pas comment mettre en œuvre.

Répondre

38

Je recommande de coller à la bibliothèque GSON pour l'analyse JSON. Voici comment une demande de Volley avec le traitement de JSON embarqué pourrait alors regarder:

import java.io.UnsupportedEncodingException; 

import com.android.volley.NetworkResponse; 
import com.android.volley.ParseError; 
import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.Response.ErrorListener; 
import com.android.volley.Response.Listener; 
import com.android.volley.toolbox.HttpHeaderParser; 
import com.google.gson.Gson; 
import com.google.gson.JsonSyntaxException; 

/** 
* Volley GET request which parses JSON server response into Java object. 
*/ 
public class GsonRequest<T> extends Request<T> { 

    /** JSON parsing engine */ 
    protected final Gson gson; 

    /** class of type of response */ 
    protected final Class<T> clazz; 

    /** result listener */ 
    private final Listener<T> listener; 

    public GsonRequest(String url, Class<T> clazz, Listener<T> listener, 
      ErrorListener errorListener) { 
     super(Method.GET, url, errorListener); 

     this.clazz = clazz; 
     this.listener = listener; 
     this.gson = new Gson(); 
    } 

    @Override 
    protected void deliverResponse(T response) { 
     listener.onResponse(response); 
    } 

    @Override 
    protected Response<T> parseNetworkResponse(NetworkResponse response) { 
     try { 
      String json = new String(
        response.data, HttpHeaderParser.parseCharset(response.headers)); 
      return Response.success(
        gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); 

     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } catch (JsonSyntaxException e) { 
      return Response.error(new ParseError(e)); 
     } 
    } 
} 

Imaginons que vous avez une méthode de serveur situé à http://example.com/api/persons/ qui retourne un tableau JSON de la personne; Personne se présente comme suit:

public class Person { 
    String firstName; 
    String lastName; 
} 

Nous pouvons appeler la méthode indiquée ci-dessus comme ceci:

GsonRequest<Person[]> getPersons = 
     new GsonRequest<Person[]>("http://example.com/api/persons/", Person[].class, 

      new Listener<Person[]>() { 
       @Override 
       public void onResponse(Person[] response) { 
        List<Person> persons = Arrays.asList(response); 
        // TODO deal with persons 
       } 

      }, new ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // TODO deal with error 
       } 
      }); 

VolleyQueue.get().add(getPersons); 

Et enfin auditeur de réponse nous obtenons un tableau de personne qui peut être convertie en liste et alimenté à l'adaptateur de ListView .

+1

Où va le dernier extrait de code? Et où est défini VolleyQueue? – Greg

+0

pouvons-nous utiliser la méthode de jeton de type ici? –

+0

Nice sample.its aidé.! –

0

Vous pouvez utiliser le JSONParsor natif dans le cadre android vos besoins sont comparativement moins et le JSON est simple. Here est un lien pour le tutoriel.

Mais si vous utilisez objets complexesJSON, utilisez les bibliothèques comme

  • GSON
  • Jackson

Je trouve GSON plus facile et plus efficace d'utiliser . Vous en savez plus à ce sujet de Here

+0

Merci, je vais probablement utiliser GSON. Pouvez-vous élaborer sur la façon d'analyser réellement un tableau? L'exemple que vous avez référencé utilise AsyncTask, pas Volley, donc c'est un peu déroutant. J'ai trouvé qu'il y a beaucoup de ressources sur l'analyse d'un JSONObject, mais pas autant pour un tableau qui est ce que j'ai affaire. – settheline

+0

passez la chaîne de réponse de 'volley' à' gson' – SathMK