2016-04-05 9 views
1

hallo.ANDROID Volley + Gson (POST)

Ich möchte eine Post-Anfrage mit gson machen.

Ich habe die Klasse in android Webseite implementiert ... http://developer.android.com/intl/pt-br/training/volley/request-custom.html

UserRequestHelper.userRequest(Request.Method.POST, EndpointURL.USUARIO, null, new Response.Listener<Usuario>() { 
        @Override 
        public void onResponse(Usuario response) { 
         Toast.makeText(getActivity(), "Cadastro realizado com sucesso!", Toast.LENGTH_SHORT).show(); 
        } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Toast.makeText(getActivity(), "Erro ao realizar cadastro.", Toast.LENGTH_SHORT).show(); 
        } 
       }); 

Ich brauche einen Körper, um die Benutzer zu senden? Wie sende ich den Objektbenutzer, um eine Postanforderung zu stellen?

Könnte mir jemand dabei helfen?

Antwort

3

müssen Sie getBody außer Kraft setzen:

@Override 
public byte[] getBody() throws AuthFailureError { 
    return gson.toJson(dataIn).getBytes(); 
} 

die ganze Beispielklasse (bilden den gleichen Link) bearbeitet:

public class GsonRequest<T> extends Request<T> { 
private final Gson gson = new Gson(); 
private final Class<T> clazz; 
private final Map<String, String> headers; 
private final Response.Listener<T> listener; 
private final Object dataIn; 

/** 
* Make a GET request and return a parsed object from JSON. 
* 
* @param url URL of the request to make 
* @param clazz Relevant class object, for Gson's reflection 
* @param headers Map of request headers 
*/ 
public GsonRequest(String url, Object dataIn, Class<T> clazz, Map<String, String> headers, 
        Response.Listener<T> listener, Response.ErrorListener errorListener) { 
    super(Method.POST, url, errorListener); 
    this.dataIn = dataIn; 
    this.clazz = clazz; 
    this.headers = headers; 
    this.listener = listener; 
} 

@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
    return headers != null ? headers : super.getHeaders(); 
} 

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

@Override 
public byte[] getBody() throws AuthFailureError { 
    return gson.toJson(dataIn).getBytes(); 
} 

@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)); 
    } 
    } 
} 
+0

als ich brauche nur ein Objekt wie Benutzer user = new User zu bauen (); user.setName ("Test"); und den Benutzer in die Variable dataIn übergeben? –

+0

ja. Vielleicht möchten Sie den Typ von Objekt zu Benutzer ändern, wenn Sie nur diesen Typ übergeben möchten. – djodjo

+0

Dann kann ich das Objekt in Benutzertyp ändern ... Aber wofür ist clazz? Kannst du mir das erklären? –