2016-06-11 7 views
0

Ich habe eine json wie diese senden:Wie kann ich String-Array durch Volley senden?

{ 
    "user_id": "5750891ffe77d2d41732d535", 
    "categories" :["5751cd8cb61c39200b368cf3","575b35b9c456c8751cd8530f", "575b35c5c456c8751cd85313"] 
} 

aber volley nur Strings senden, kein Array. Das ist mein Wunsch Klasse, ich bin mit dem Volley StringRequest aber ich denke, es gibt eine Möglichkeit, auch eine Reihe an:

public class VolleyRequest extends StringRequest { 

    private Map<String, String> params; 
    Context context; 

    public VolleyRequest(int method, final Context context, String url, Map<String, String> params, final Response.Listener<String> listener) { 
     super(method, url, listener, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       Log.d("WS", volleyError.toString()); 
      } 
     }); 

     setRetryPolicy(new DefaultRetryPolicy(10000, 10, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));  

     this.params = params; 
     this.context = context; 
    } 

    @Override 
    public String getBodyContentType() { 
     return "application/x-www-form-urlencoded; charset=UTF-8"; 
    } 

    @Override 
    public Map<String, String> getParams() throws AuthFailureError { 
     return this.params; 
    } 
} 
+2

Mögliche Duplikat [Volley Post-Methode für JSON-Objekt] (http://stackoverflow.com/questions/25906689/volley-post-method-for-json-object) –

Antwort

0

ich es herausfinden! Sie müssen die Funktion getBody() überschreiben, eine benutzerdefinierte Funktion encodeParameters erstellen und auch getBodyContentType() überschreiben, um sie so zu ändern, dass sie "application/json" zurückgibt.

public class VolleyRequest extends StringRequest { 

    private Map<String, String> params; 
    Context context; 

    public VolleyRequest(int method, final Context context, String url, String json, final Response.Listener<String> listener) { 
     super(method, url, listener, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       Log.d("WS", volleyError.toString()); 
      } 
     }); 

     setRetryPolicy(new DefaultRetryPolicy(10000, 10, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));  

     this.params = params; 
     this.context = context; 
    } 

    @Override 
    public byte[] getBody() throws AuthFailureError { 
     return encodeParameters(getParamsEncoding()); 
    } 

    private byte[] encodeParameters(String paramsEncoding) { 
     try { 
      if(json!=null) { 
       return json.getBytes(paramsEncoding); 
      } 
      else return null; 
     } catch (UnsupportedEncodingException uee) { 
      throw new RuntimeException("Encoding not supported: " + paramsEncoding, uee); 
     } 
    } 

    @Override 
    public String getBodyContentType() { 
     return "application/json"; 
    } 

    @Override 
    public Map<String, String> getParams() throws AuthFailureError { 
     return this.params; 
    } 
} 

Schau, dass ich jetzt ein String json als Parameter auf meine Anfrage, nicht eine HashMap übergeben. So erstellen Sie diese Zeichenfolge eine gebrauchte Gson und ein Modell meines gewünschten json Körper:

public class ModelSendFilters { 
    String user_id; 
    String[] categories; 

    public String getUser_id() {return user_id;} 
    public void setUser_id(String user_id) {this.user_id = user_id;} 

    public String[] getCategories() {return categories;} 
    public void setCategories(String[] categories) {this.categories = categories;} 

} 

den String json zu erstellen:

new Gson().toJson(user, ModelSendFilters.class) 
+0

Es gibt viele Beiträge hier über POST-in eine JSON-Zeichenfolge, die nicht das Java-Modell enthalten –