上文中[HTTP那些事]JSON数据,我们提到,能否让我们的HTTP框架帮我们完成自动反序列化的操作。同时也给大家做了些提示:泛型和反射。
现在我们以Volley为例:
在Volley中有三种Request:FileRequest,StringRequest,ImageRequest。
JSON数据也是字符串,所以我们要重写StringRequest中的部分方法就可以咯。
看下StringRequest源码,你会看到解析服务器byte[]到String的是parseNetworkResponse(NetworkResponse response),解析完String直接就return给外层了。
这里我们也采用相同的方式,创建一个GsonRequest< T >继承Request< T >, 至于实现,先把StringRequest的代码copy过来。唯一不同的是,StringRequest因为指定返回String类型数据所以不需要泛型。
在parseNetworkResponse(NetworkResponse response)中,我们引入gson来反序列化json string,T的class怎么办呢?你可以通过外层显式的传进来或者通过反射来拿类上的泛型T的type。两种都可以。
具体到代码:
扩展完毕,你只需要new GsonRequest,声明好泛型T,等待接收t对象回调就好啦。
如果你想知道这种扩展是如何一步步推导出来的,可以看Stay录的专题视频。
传送门:预处理服务器返回的数据(JSON转对象)
像这样的扩展还有很多,框架不是万能的,要合理的根据自己的需求定制你想要的框架。
最后,留个问题给大家,如果是服务器返回了1M的JSON数据,还能用上述扩展么?如果不可以,那该怎么办呢?