首页 > 解决方案 > 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));
    }
}
}

只是希望启动并运行该示例,因此它至少可以接收要在屏幕上显示的数据。

标签: javaandroidandroid-volleygson

解决方案


首先,您需要根据预期的 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

推荐阅读