• 【第四篇】Volley修改之GsonRequest


    json解析工具类的引入,这里引用lite马天宇的解析json的工具类:

    public class GsonImpl extends Json {
        private Gson gson = new Gson();
    
        @Override
        public String toJson(Object src) {
            return gson.toJson(src);
        }
    
        @Override
        public <T> T toObject(String json, Class<T> claxx) {
            return gson.fromJson(json, claxx);
        }
    
        @Override
        public <T> T toObject(byte[] bytes, Class<T> claxx) {
            return gson.fromJson(new String(bytes), claxx);
        }
    
    }
    public abstract class Json {
        private static Json json;
    
        Json() {}
    
        public static Json get() {
            if (json == null) {
                json = new GsonImpl();
            }
            return json;
        }
    
        public abstract String toJson(Object src);
    
        public abstract <T> T toObject(String json, Class<T> claxx);
    
        public abstract <T> T toObject(byte[] bytes, Class<T> claxx);
    }

    集成子Request,在parseNetworkResponse方法里面封装解析json的逻辑

    public class GsonRequest<T> extends Request<T> {
        private Class<T> mClazz;
        private Listener<T> listener;
        private Map<String, String> headers;
    
        /**
         * 
         * @param method
         *            請求方式
         * @param url
         *            获取json的url
         * @param clazz
         *            json对应的javaBean
         * @param headers
         *            头文件
         * @param listener
         *            监听
         * @param errorListener
         *            错误监听
         */
    
        public GsonRequest(int method, String url, Class<T> clazz,
                Map<String, String> headers, Listener<T> listener,
                ErrorListener errorListener) {
            super(method, url, errorListener);
            this.mClazz = clazz;
            this.headers = headers;
            this.listener = listener;
        }
    
        /**
         * 获取头文件
         */
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            return headers != null ? headers : super.getHeaders();
        }
    
        /**
         * 解析json
         */
        @Override
        protected Response<T> parseNetworkResponse(NetworkResponse response) {
            String jsonString;
            try {
                jsonString = new String(response.data,
                        HttpHeaderParser.parseCharset(response.headers));
                return Response.success(
                        GsonImpl.get().toObject(jsonString, mClazz),
                        HttpHeaderParser.parseCacheHeaders(response));
            } catch (UnsupportedEncodingException e) {
                return Response.error(new ParseError(e));
            }
        }
    
        /**
         * 分发返回内容
         */
        @Override
        protected void deliverResponse(T response) {
            listener.onResponse(response);
        }
    }

    使用demo:

    1 ,添加网络权限;

    2,编码:

    http://www.weather.com.cn/data/sk/101010100.html里面的json数据如下:

    {"weatherinfo":{"city":"北京","cityid":"101010100","temp":"9","WD":"西南风","WS":"2级","SD":"22%","WSE":"2","time":"10:45","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB","njd":"暂无实况","qy":"1014"}}

    对应的javaBean为如下两个类:

    public class Weather implements Serializable{
        private static final long serialVersionUID = 1L;
        private Weatherinfo weatherinfo;  
          
        public Weatherinfo getWeatherinfo() {  
            return weatherinfo;  
        }  
      
        public void setWeatherinfo(Weatherinfo weatherinfo) {  
            this.weatherinfo = weatherinfo;  
        }
    
        @Override
        public String toString() {
            return "Weather [weatherinfo=" + weatherinfo + "]";
        }  
    }

    和Weatherinfo类:

    public class Weatherinfo implements Serializable{
    
        private static final long serialVersionUID = 1L;
        private String city;
        private String cityid;
        private String temp;
        private String WD;
        private String WS;
        private String SD;
        private String WSE;
        private String time;
        private String isRadar;
        private String Radar;
        private String njd;
        private String qy;
    
        public String getCity() {
            return city;
        }
    
        public void setCity(String city) {
            this.city = city;
        }
    
        public String getCityid() {
            return cityid;
        }
    
        public void setCityid(String cityid) {
            this.cityid = cityid;
        }
    
        public String getTemp() {
            return temp;
        }
    
        public void setTemp(String temp) {
            this.temp = temp;
        }
    
        public String getWD() {
            return WD;
        }
    
        public void setWD(String wD) {
            WD = wD;
        }
    
        public String getWS() {
            return WS;
        }
    
        public void setWS(String wS) {
            WS = wS;
        }
    
        public String getSD() {
            return SD;
        }
    
        public void setSD(String sD) {
            SD = sD;
        }
    
        public String getWSE() {
            return WSE;
        }
    
        public void setWSE(String wSE) {
            WSE = wSE;
        }
    
        public String getTime() {
            return time;
        }
    
        public void setTime(String time) {
            this.time = time;
        }
    
        public String getIsRadar() {
            return isRadar;
        }
    
        public void setIsRadar(String isRadar) {
            this.isRadar = isRadar;
        }
    
        public String getRadar() {
            return Radar;
        }
    
        public void setRadar(String radar) {
            Radar = radar;
        }
    
        public String getNjd() {
            return njd;
        }
    
        public void setNjd(String njd) {
            this.njd = njd;
        }
    
        public String getQy() {
            return qy;
        }
    
        public void setQy(String qy) {
            this.qy = qy;
        }
    
        @Override
        public String toString() {
            return "Weatherinfo [city=" + city + ", cityid=" + cityid + ", temp="
                    + temp + ", WD=" + WD + ", WS=" + WS + ", SD=" + SD + ", WSE="
                    + WSE + ", time=" + time + ", isRadar=" + isRadar + ", Radar="
                    + Radar + ", njd=" + njd + ", qy=" + qy + "]";
        }
    
    }

    Activity里面:

    public class MainActivity extends Activity {
        private String url = "http://www.weather.com.cn/data/sk/101010100.html";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            RequestQueue mQueue = Volley.newRequestQueue(this);
            GsonRequest<Weather> request = new GsonRequest<Weather>(Method.GET, url, Weather.class, null, new Response.Listener<Weather>() {
    
                @Override
                public void onResponse(Weather response) {
                    Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_LONG).show();
                }
            }, new Response.ErrorListener() {
    
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
                }
            });
            mQueue.add(request);
            
        }
    }
  • 相关阅读:
    Elasticsearch 配置优化
    一个Elasticsearch嵌套nested查询的实例
    apache kafka配置中request.required.acks含义
    filebeat配置介绍
    Linux nohup命令详解
    elasticsearch中如何手动控制全文检索结果的精准度
    elasticsearch中filter执行原理深度剖析(bitset机制与caching机制)
    logback与log4j比较
    Markdown常用语法
    Asp.NetCore3.1中JWT认证入门使用(一)
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/4786330.html
Copyright © 2020-2023  润新知