gson相关封装解析

下面通过gson对数据进行简单的封装与解析,还是以上篇json解析的 数据为例:

{
    "owner": "张三",
    "statusCode": 1,
    "policyId": "18510060885",
    "seqNo": true,
    "msg": false,
    "status": 0
    "insuranceInfo": {
        "companyName": "李四",
       "companyCode": 12345
        "primary": [ {
                "amount": 6656,
                "insuranceCode": 4566,
                "des": "babababa",
                "selected": "555",
                "buyRate": "45%",
                "insuranceName": "王五",
                "options": [  {  "value": "value",  "key": "key" } ]  } ],
    },
}

首先定义一个实体类对象对要封装的数据的一般定义:

public class Text1 {
    public String owner;
    public int  statusCode;
    public int status;
    public boolean seqNo;
    public boolean msg;
    public HashMap insuranceinfo;
    public String getOwner() {
        return owner;
    }
    public void setOwner(String owner) {
        this.owner = owner;
    }
    public int getStatusCode() {
        return statusCode;
    }
    public void setStatusCode(int statusCode) {
        this.statusCode = statusCode;
    }
    public int getStatus() {
        return status;
    }
    public void setStatus(int status) {
        this.status = status;
    }
    public boolean isSeqNo() {
        return seqNo;
    }
    public void setSeqNo(boolean seqNo) {
        this.seqNo = seqNo;
    }
    public boolean isMsg() {
        return msg;
    }
    public void setMsg(boolean msg) {
        this.msg = msg;
    }
    public HashMap getInsurancoinfo() {
        return insuranceinfo;
    }
    public void setInsurancoinfo(HashMap insurancoinfo) {
        this.insuranceinfo = insurancoinfo;
    }
    @Override
    public String toString() {
        return "aaaa [owner=" + owner + ", statusCode=" + statusCode + ", status=" + status + ", seqNo=" + seqNo
                + ", msg=" + msg + ", insuranceinfo=" + ", insurancoin=" + insuranceinfo
                + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
                + "]";
    }

接下来还是在Activity xml中简单的定义一个TextView对象用来展示封装过得字符串,其实封装过程有好多种,我就用HasMap,和List等进行简单封装具体封装如下:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=(TextView)findViewById(R.id.text);
        button=(Button)findViewById(R.id.button);
        init();

    }
    private void init() {
         gson=new Gson();
      Text1 text=new Text1();
        text.owner="张三";
        text.statusCode=88;
        text.status=0;
        text.seqNo=true;
        text.msg=false;
        HashMap<String,Object>insuranceinfo=new HashMap<>();
        insuranceinfo.put("companyName","李四");
        insuranceinfo.put("companyCode",234);
        ArrayList<HashMap> primary=new ArrayList<>();
        HashMap<String,Object>hash=new HashMap<>();
        hash.put("amount",6656);
        hash.put("insuranceCode",4566);
        hash.put("des","babababa");
        hash.put("selected",true);
        ArrayList<HashMap>options=new ArrayList<>();
        HashMap<String,String>hashM=new HashMap<>();
        hashM.put("key","value");
        hashM.put("value","key");
        options.add(hashM);
        hash.put("options",options);
        primary.add(hash);
        insuranceinfo.put("primary",primary);
        text.insuranceinfo=insuranceinfo;
        gson.toJson(text);
        textView.setText(gson.toJson(text));
        inDetail(gson.toJson(text));

最后TextView中显示的内容如下图:

gson相关的解析要比json相对简单一些。但是gson在解析时一般要根据解析的字符串对象建立相应的实体类对象,根据相应的层次关系进行嵌套,就以上面为例实体对象可以定义为:

public class Text1 {
    public String owner;
    public int  statusCode;
    public int status;
    public boolean seqNo;
    public boolean msg;
    public List<Insuranceinfo> insuranceinfo;

public  class Insuranceinfo {
    public String companyName;
    public int companyCode;
    public List<Primary> primary;
public class Primary {
    public int amount;
    public int insuranceCode;
    public String des;
    public boolean selected;
    public List<Options>options;
public class Options {
    public String key;
    public String value;
具体的git set方法自己生成就是了,接下来就是一般的解析了,gsonStr为封装传过来的字符串

private void inDetail(String gsonStr) {
  if(!gsonStr.isEmpty()){
    Text1 tex=new Text1();
    Type type = new TypeToken<Text1>() {
    }.getType();
    tex=gson.fromJson(gsonStr,type);
    final Text1 finalTex = tex;
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            List<Insuranceinfo>insuranceinfo=finalTex.getInsurancoinfo();
            textView.setText(finalTex.getStatusCode()+ finalTex.getOwner()+
                    finalTex.getStatus()+finalTex.getInsurancoinfo().toString());
        }
    });
  }
对于上述应用gson如果是在eclipse上调用gson要导入gson相关联的包,可以在下面地址下载:

http://download.csdn.net/detail/itachi85/8617065

如果用AndroidStudio的话可以在Project Structure ->Dependencies 中直接搜索Gson,Studio就会帮你自动下载相应的包只要正确选择就行。别的开源包等也是一样

猜你喜欢

转载自blog.csdn.net/jiahongya/article/details/51233485