| import com.google.gson.Gson; | |
| import com.google.gson.JsonSyntaxException; | |
| import com.android.volley.AuthFailureError; | |
| 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 java.io.UnsupportedEncodingException; | |
| import java.util.Map; | |
| /** | |
| * Volley adapter for JSON requests that will be parsed into Java objects by Gson. | |
| */ | |
| 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 Listener<T> listener; | |
| /** | |
| * 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, Class<T> clazz, Map<String, String> headers, | |
| Listener<T> listener, ErrorListener errorListener) { | |
| super(Method.GET, url, errorListener); | |
| 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 | |
| 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)); | |
| } | |
| } | |
| } |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
LOG-TAG
commented
Aug 19, 2013
|
Hi, We can do like this inside Response?
//================= |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
steindekker
Oct 21, 2013
Is there a way to create a GsonRequest that delivers an ArrayList of an Object?
Like when you do:
Type type = new TypeToken<ArrayList<Example>>(){}.getType();
ArrayList<Example> = gson.fromJson(jsonString, type);
steindekker
commented
Oct 21, 2013
|
Is there a way to create a Like when you do: Type type = new TypeToken<ArrayList<Example>>(){}.getType();
ArrayList<Example> = gson.fromJson(jsonString, type); |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
sambarboza
commented
Nov 14, 2013
|
This is great! Thanks :) |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
Laeyoung
commented
Nov 25, 2013
|
Thank you!! |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
rmujica
commented
Dec 19, 2013
|
thanks ficus! |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
premnirmal
Jan 20, 2014
@ficusk Is there a way to handle gzip responses using volley? If I make a string request, the response appears to be scrambled and it loses its gzip encoding.
premnirmal
commented
Jan 20, 2014
|
@ficusk Is there a way to handle gzip responses using volley? If I make a string request, the response appears to be scrambled and it loses its gzip encoding. |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
premnirmal
commented
Jan 20, 2014
|
Nevermind, I figured it out https://gist.github.com/testtubebaby/8526542 |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
zicjin
Mar 13, 2014
@steindekker i get the same problem with you
this code is fail:
return Response.success(gson.fromJson(json, typeOfT), HttpHeaderParser.parseCacheHeaders(response));
zicjin
commented
Mar 13, 2014
|
@steindekker i get the same problem with you |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
didihe1988
commented
Apr 22, 2014
|
thanks! |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
naveen09
commented
Jun 1, 2014
|
thanks, |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
fudaye
commented
Jul 17, 2014
|
I love you |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
Nea-KH
commented
Nov 17, 2015
|
Thanks |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
caiweihao
Apr 7, 2016
@ficusk Hi, We can do like this inside Response?
Type listType = new TypeToken(){}.getType(); // compiler error
caiweihao
commented
Apr 7, 2016
|
@ficusk Hi, We can do like this inside Response? |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
ankitkumarsingh-aksingh
May 30, 2017
@steindekker You can parse Json Array like this:
Type type = new TypeToken<ArrayList<Example>>(){}.getType();
ArrayList<Example> list = gson.fromJson(jsonString, type);
ListExample listEx = new ListExample ();
listEx.setList(list);
// T t = Primitives.wrap(clazz).cast(listEx); cast your list into corresponding Class type
return Response.success(Primitives.wrap(clazz).cast(listEx),
HttpHeaderParser.parseCacheHeaders(response));
Where T relate to 'ListExample.java' class mentioned below :
public class ListExample {
List<Example> list;
public List<Example> getList() {
return list;
}
public void setList(List<Example> list) {
this.list = list;
}
}
You can send request like this:
GsonRequest<ListExample> jsonObjReq = new GsonRequest<ListExample>("Your Request Url",
ListExample.class, null, new Response.Listener<ListExample>() {
@Override
public void onResponse(ListExample response) {
List<Example> list = response.getList();
// Do your stuff here
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Do your stuff here
}
});
@zicjin try this, it's worked for me
ankitkumarsingh-aksingh
commented
May 30, 2017
•
|
@steindekker You can parse Json Array like this:
Where T relate to 'ListExample.java' class mentioned below :
You can send request like this:
@zicjin try this, it's worked for me |
Hi, We can do like this inside Response?
//=================
Type listType = new TypeToken(){}.getType(); // compiler error
//=================
Source: http://stackoverflow.com/questions/5370768/using-a-generic-type-with-gson