Android Volley Request Gson - PullRequest
       9

Android Volley Request Gson

0 голосов
/ 05 июня 2018

Хотите использовать класс на веб-сайте разработчиков Android, который использует Volley и Gson для извлечения и десериализации данных json из URL-адреса для разбора в массив.Я все еще новичок, поэтому я пытался создать экземпляр класса, но я не уверен, как форматировать параметры.Попытка поиска реализации, но они, кажется, используют другие 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));
    }
}
}

Просто ищите, чтобы пример был запущен и запущен. Так что, по крайней мере, он может получать данные для отображения на экране.

1 Ответ

0 голосов
/ 05 июня 2018

Во-первых, вам нужно определить класс модели на основе вашего ожидаемого ответа JSON.

Например, если JSON является массивом пользователей, класс модели будет выглядеть следующим образом:

Users.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
...