2014-06-23 2 views
2

Je comprends que les requêtes POST utilisant JsonArrayRequest ne sont pas disponibles dans la boîte avec Volley, mais j'ai vu cet article here qui parlait de l'ajout d'un constructeur pour gérer cela. Leur implémentation était la suivante:Android Volley Post Request - Solution de contournement pour JsonArrayRequest

public JsonArrayRequest(int method, String url, JSONObject jsonRequest, 
     Listener<JSONArray> listener, ErrorListener errorListener) { 
    super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), 
     listener, errorListener); 
} 

Comment est-ce que j'allais ajouter ceci en tant que constructeur? La question ci-dessus mentionne le placer dans la bibliothèque d'outils Volley. J'ai importé Volley en tant que .jar, donc je ne sais pas comment ajouter un constructeur comme celui-ci, ou si c'est la meilleure approche. Toute aide est très appréciée.

EDIT

J'ai créé la classe suivante avec priorité et constructeur comme l'a suggéré. Voici la classe:

public class PostJsonArrayRequest extends JsonArrayRequest { 

    @Override 
    protected Map<String, String> getParams() throws AuthFailureError { 
     HashMap<String, String> params = new HashMap<String, String>(); 
     params.put("name", "value"); 
     return params; 
    } 

    public PostJsonArrayRequest(int method, String url, JSONObject jsonRequest, 
      Listener<JSONArray> listener, ErrorListener errorListener) { 
     super(Method.POST, url, null, listener, errorListener); 
    } 
} 

Sur la ligne d'appel super je reçois The constructor JsonArrayRequest(int, String, null, Response.Listener<JSONArray>, Response.ErrorListener) is undefined

Comment puis-je corriger cela?

+0

Sous JsonArrayRequest, constructeur mis là à la place – panini

Répondre

2

Créer une classe et d'étendre JsonArrayRequest puis passer outre

@Override 
protected Map<String, String> getParams() throws AuthFailureError { 
    HashMap<String, String> params = new HashMap<String, String>(); 
    params.put("name", "value"); 
    return params; 
} 

et ajouter un nouveau constructeur et il appeler

super(Method.POST, url, null, listener, errorListener); 

ou utilisez cette classe

public class PostJsonArrayRequest extends JsonRequest<JSONArray> { 

    /** 
    * Creates a new request. 
    * @param url URL to fetch the JSON from 
    * @param listener Listener to receive the JSON response 
    * @param errorListener Error listener, or null to ignore errors. 
    */ 
    public PostJsonArrayRequest(String url, Response.Listener<JSONArray> listener, Response.ErrorListener errorListener) { 
     super(Method.POST, url, null, listener, errorListener); 
    } 

    @Override 
    protected Map<String, String> getParams() throws AuthFailureError { 
     HashMap<String, String> params = new HashMap<String, String>(); 
     params.put("name", "value"); 
     return params; 
    } 

    @Override 
    protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) { 
     try { 
      String jsonString = 
        new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 
      return Response.success(new JSONArray(jsonString), 
        HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } catch (JSONException je) { 
      return Response.error(new ParseError(je)); 
     } 
    } 
} 
+0

Merci pour la réponse. J'ai créé une classe pour étendre 'JsonArrayRequest', ajouté le remplacement pour Map, et ajouté un constructeur comme votre exemple. J'ai mis à jour ma question avec le code. Je reçois une erreur (posté ci-dessus). – settheline

Questions connexes