java - Android Volley 请求 Gson
问题描述
希望使用 android 开发者网站上的类,该类使用 Volley 和 Gson 从 url 获取和反序列化 json 数据以解析为数组。我仍然是初学者,所以我试图实例化该类,但我不确定如何格式化参数。尝试寻找实现,但他们似乎还使用了其他 API。返回的 json 只有一个字段和一个值,所以类对象 clazz 有一个字段。
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));
}
}
}
只是希望启动并运行该示例,因此它至少可以接收要在屏幕上显示的数据。
解决方案
首先,您需要根据预期的 JSON 响应定义模型类。
例如,如果您的 JSON 是用户数组,那么模型类将如下所示,
用户.Java
public class Users extends Object implements Serializable {
private static final long serialVersionUID = 1L;
@SerializedName("users")
private ArrayList<User> arrListUser;
public ArrayList<User> getArrListBusinessObj() {
return arrListUser;
}
public static class User extends Object implements Serializable
{
private static final long serialVersionUID = 1L;
private String user_id;
private String name;
private String artwork;
public String getBusinessObjId() {
return user_id;
}
public String getName() {
return name;
}
public String getArtwork() {
return artwork;
}
}
}
然后在您收到网络响应的地方,调用以下方法:
Users users = (Users)gson.fromJson(data, Users.class); //data is string form response from server