2013-05-24 3 views
0

J'essaie d'utiliser une version personnalisée de la classe de demande à partir de android Volley framework. J'ai réussi à travailler GET demande personnalisée, mais il échoue avec POST. Je surpasse la méthode getBody() et retourne byte []. Mais Volley se plaint que les connexions sont déjà ouvertes.Personnaliser Demande de classe de Volley framework

code:

@Override 
public byte[] getBody() throws AuthFailureError { 
    JSONObject json = new JSONObject(); 
    try { 
     json.put("date_in_millis", this.newsDateInMillis); 
     json.put("title", URLEncoder.encode(this.newsTitle.replace("\n", "").replace("\r", ""), "UTF-8")); 
     return new StringEntity("data=" + json.toString(), "UTF-8").toString().getBytes(); 
    } catch (Exception e) { 
     throw new RuntimeException(e.getMessage()); 
    } 
} 

Exception:

05-24 21:51:08.076: E/Volley(5535): [177] NetworkDispatcher.run: Unhandled exception  
java.lang.IllegalStateException: Already connected 
05-24 21:51:08.076: E/Volley(5535): java.lang.IllegalStateException: Already connected 
05-24 21:51:08.076: E/Volley(5535):  at java.net.URLConnection.checkNotConnected(URLConnection.java:464) 
05-24 21:51:08.076: E/Volley(5535):  at java.net.URLConnection.setDoOutput(URLConnection.java:878) 
05-24 21:51:08.076: E/Volley(5535):  at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:225) 
05-24 21:51:08.076: E/Volley(5535):  at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:210) 
05-24 21:51:08.076: E/Volley(5535):  at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:106) 
05-24 21:51:08.076: E/Volley(5535):  at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93) 
05-24 21:51:08.076: E/Volley(5535):  at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105) 

Tout celui utilisé demande Volley de cette façon?

Merci

+0

Je viens d'essayer ça. Aucune exception ici. Pourrait aider si vous postez plus de cette classe. Avez-vous des demandes avant celle-ci? – AfzalivE

+0

J'ai également outrepassé le getHeader() mais je ne pense pas que cela puisse causer des problèmes. Si quelqu'un me donne un exemple de code pour publier un fichier avec des méta-données de texte en utilisant Volley, ce serait très utile. –

Répondre

1

Je pense que la meilleure façon est d'hériter JsonRequest (ou JsonObjectRequest) de la boîte à outils Volley \ parce que tout ce que vous devez faire est de passer chaîne requestBody à superclasse contructor

public JsonRequest(int method, String url, String requestBody, Listener<T> listener, 
     ErrorListener errorListener) { 
    super(method, url, errorListener); 
    mListener = listener; 
    mRequestBody = requestBody; 
} 

Vous pouvez toujours remplacer parse parseNetworkResponse et parseNetworkError si nécessaire. Si vous avez vraiment besoin d'hériter de Request, vous devriez vérifier comment JsonRequest implémente getBody() et getBodyContentType().