针对实体编程
来源:互联网 发布:linux opt目录的作用 编辑:程序博客网 时间:2024/05/20 16:09
在项目中,之前同事Json解析的时候,之前都是这么写的
try { JSONArray list = response.getJSONArray("list"); if(list.length() == 0){ img_nocontent.setVisibility(View.VISIBLE); } for (int i = 0; i < list.length(); i++) { HospitalInfo info = new HospitalInfo(); JSONObject data = list.getJSONObject(i); info.setName(data.getString("name")); info.setHospital_id(data.getString("hospital_id")); infolist.add(info); } } catch (JSONException e) { e.printStackTrace(); }
借助SDK提供的工具来完成Json数据的解析:
import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;
这样写没错,而且,有一个便利的地方就是,如果服务器给返回的数据里有个JsonObject少了个数据的话,我们可以用JsonObject的has(“xxx”) 判断是否存在该数据,然后在取数据,一定程度上防止了NullPointerException的发生。
如下写法:
JSONObject _json = (JSONObject) _jsonArray.get(i); InteractInfo info = new InteractInfo(); if(_json.has("username")) info.setUsername(_json.getString("username"));
有很长一段时间,我也是这样来解析Json的。直到我遇到一个特别发杂的json的时候,我才醒过来,这。。。。。。有点。。。。。。
那么有没有简单的写法儿呢?有,我们可以借助Gson来完成这项工作。
下面要描述的就如标题所示——针对实体编程。
在请求数据时,不再关心返回数据是什么内容。将返回数据,统一视作一个实体。借助Android Studio上的插件 GsonFromat将Json数据转为一个实体Entity。然后针对该Entity进行编程。
- 在项目的build.gradle 中加入 gson
- 借助JsonUtils.java来进行解析Json
- 一句代码完成Json解析,不论多么复杂的Json
引入gson
compile files('libs/gson-2.5.jar')
引入JsonUtils
JsonUtils.java 如下所示:
package com.network;import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.google.gson.JsonElement;import com.google.gson.JsonPrimitive;import com.google.gson.JsonSerializationContext;import com.google.gson.JsonSerializer;import com.wjq.lib.util.L;import java.lang.reflect.Type;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;/** * Json 解析工具类,借助Gson */public class JsonUtils { private static GsonBuilder gsonb = null; static { gsonb = new GsonBuilder(); } /** * 这块儿很可能抛异常,在具体调用处处理吧 * <p/> * 将一个json 字符串解析为 bean 对象 * * @param jsonString * @param type * @param <T> * @return */ public static <T> T toBean(String jsonString, Type type) { // Gson gson = gsonb.create(); final String dateformat = "yyyy-MM-dd HH:mm:ss"; Gson gson = new GsonBuilder().registerTypeHierarchyAdapter(Date.class, new JsonSerializer<Date>() { public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { SimpleDateFormat format = new SimpleDateFormat(dateformat, Locale.getDefault()); return new JsonPrimitive(format.format(src)); } }).setDateFormat(dateformat).create(); L.et("gson", "--JsonUtils.toBean--jsonString:" + jsonString); if (jsonString != null && !jsonString.equals("{}") && !jsonString.equals("[]")) { return gson.fromJson(jsonString, type); } else { return null; } } /** * 这块儿很可能抛异常,在具体调用处处理吧 * * 将对象转为json字符串 * @param bean * @return * @throws Exception */ public static String toString(Object bean) throws Exception { Gson gson = gsonb.create(); return gson.toJson(bean); }}
在项目中具体使用
private List<ProjectListEntity> list = null; ..... try { list = JsonUtils.toBean(response.toString(), new TypeToken<List<ProjectListEntity>>() { }.getType()); } catch (Exception e) { e.printStackTrace(); onLoadFailInfo(); }
这样做的好处:
- 节省了很多的时间,因为之前在手动解析那些json的时候,碰到复杂,长传的json是很费时间的;
- 还是节省了很多时间,那些实体都可以借助插件来生成,省下了写实体entity的时间;
- 省了很多代码,代码量少了很多。
可以从这里下载上文提到的 JsonUtils.java
0 0
- 针对实体编程
- 针对实体编程不针对数据库编程 -EF里的增删改查
- 针对接口编程,而不是针对实现编程
- 针对接口编程
- 针对接口编程
- 针对接口编程
- 应该针对接口编程 而不是针对实现编程
- PHP针对HTML实体字符的转义函数
- 依赖倒转 -- 针对接口编程
- 为什么要针对接口编程
- 针对flume的客户端编程
- 针对接口编程的理解
- 针对接口编程及敏捷编程
- 编程针对接口而不是针对实现——中心
- 针对Java 开发人员的C# 编程语言-
- php编程,针对MYSQL的操作类
- 编程的总结针对自己的
- 从针对接口编程到依赖注入
- Java程序设计的基本概念
- linux下为php添加curl扩展的方法
- php过滤微信名中包含的表情
- iOS官方图标尺寸说明
- C/C++中volatile关键字详解
- 针对实体编程
- Hdu 1541 Stars
- java虚拟机的Stack和Heap
- angular js $http
- Python-RESTful API开发(二)
- gdb调试info threads只能显示一个进程问题
- 【Python django学习笔记】- django安装和启动
- Common administrative commands in Red Hat Enterprise Linux 5, 6, and 7
- jsonp 使用记录(二)跨域设置cookie