首页 > 其他分享 >说说关于Android使用Gson解析Json所需实体类的那些事~

说说关于Android使用Gson解析Json所需实体类的那些事~

时间:2022-11-10 19:37:43浏览次数:40  
标签:02 26 实体类 Gson Json Android data public


LZ-Says:技术,真的是日积月累,厚积薄发~

前言

目前解析json的方法有很多种,LZ个人认为使用Gson还是一种很不错的选择,因为使用Gson时,我们只需要考虑将json中参数和实体类属性一一对应即可,那么就以下面json数据为大家说明使用Gson解析Json所需实体类的那些事~

示例Json

{
"statusCode": 1100,
"message": "获取成功",
"data": [
{
"pname": "赵怡",
"idcard": "228",
"checkType": 1,
"calendar": "2017-02-06 16:26:26",
"recordId": 405,
"roomName": "白白",
"checkInStartTime": "2017-02-06 15:02:16",
"checkInDescript": "登记"
},
{
"pname": "赵标",
"idcard": "1302",
"checkType": 1,
"calendar": "2017-02-06 16:26:26",
"recordId": 403,
"roomName": "红红",
"checkInStartTime": "2017-02-06 14:42:34",
"checkInDescript": "登记"
}
]
}

如上Json包含三个参数,分别为statusCode(响应码),message(响应码对应消息内容),data(数据),其中data为List。

而且项目中规定接口返回数据格式都是以:响应码,响应码对应内容,数据为主。

根据上面简单分析,我们开始动手写实体类:

public class HttpClassBean{
public int statusCode;
public String message;
public List<ClassBean> data;
}

实体类写法演变

data类型也许会是多个,那么让我们一起看看,怎么写,才比较顺手?
一开始,我们都是这样写:

一开始,我们有多少写多少
public class HttpGreadBean{
public int statusCode;
public String message;
public List<GreadBean> data;
}

。。。
也就是有多少类型就写多少个实体类,而且重要的是,要重复写n次code,messag。那么这时候,有人会说了,单独将code,message提取出去,其他相关实体类继承一下不就得了?也对,这就是我们第二种方式。

之后,我们把重复属性字段提取出来
public class HttpBean{
public int statusCode;
public String message;
}
public class HttpClassBean extends HttpBean{
public List<HttpClassBean> data;
}

不满各位,LZ也是一直这么干的,但是今天又发现一种写法,我们只需要编写底层实体类,也就是List<这个类型>的实体类。

最后,只需要关注类型实体类即可

将原有HttpBean修改如下:

public class HttpBean<T> {

public int statusCode;
public String message;
public List<T> data;

}

现在,我们只需要关注T即可。那么该怎么通过Gson解析json呢?

我们接着往下瞧~

通过Gson解析json(根据第三种实体类编写而解析)

package com.example.gsonjsonstudy;

import java.lang.reflect.Type;

import android.app.Activity;
import android.os.Bundle;

import com.example.gsonjsonstudy.entity.PeopleBean;
import com.example.gsonjsonstudy.httpbean.HttpBean;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class MainActivity extends Activity {

private static final String json = "{\"statusCode\":1100,\"message\":\"获取成功\",\"data\":[{\"pname\":\"赵怡\",\"idcard\":\"228\",\"checkType\":1,\"calendar\":\"2017-02-06 16:26:26\",\"recordId\":405,\"roomName\":\"白白\",\"checkInStartTime\":\"2017-02-06 15:02:16\",\"checkInDescript\":\"登记\"},{\"pname\":\"赵标\",\"idcard\":\"112\",\"checkType\":1,\"calendar\":\"2017-02-06 16:26:26\",\"recordId\":403,\"roomName\":\"红红\",\"checkInStartTime\":\"2017-02-06 14:42:34\",\"checkInDescript\":\"登记\"}]}";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gsonToJsonStudy();
}

private void gsonToJsonStudy() {
Gson gson = new Gson();
//指定T的类型
Type userType = (Type) new TypeToken<HttpBean<PeopleBean>>(){}.getType();
HttpBean<PeopleBean> peoResult = gson.fromJson(json, userType);
//获取第一个对象
PeopleBean bean = peoResult.data.get(0);
}

}

DeBug截图呈上~

1.指定T类型

说说关于Android使用Gson解析Json所需实体类的那些事~_实体类

2.获取第一个对象信息

说说关于Android使用Gson解析Json所需实体类的那些事~_解析json_02

结束

到目前为止,已简单为大家介绍三种写法,个人推荐使用第三种,当然有更好的写法欢迎大家和我分享~


标签:02,26,实体类,Gson,Json,Android,data,public
From: https://blog.51cto.com/u_13346181/5841964

相关文章

  • 涨姿势 之 Android Studio 3.5 设置类模版
    L-J_Q:遇到小赖皮怎么破?前言最近更新完AndroidStudio3.5后,突然发现之前设置的一些东西通通消失了,记得是覆盖呀。最无奈的一点就是每次新建类,都需要手动添加类注释,今天......
  • 涨姿势 之 Android Studio 解决 no module
    LZ-Says:总有一份关心,深入内心。前言终于多少明白鸡大说的沉浸,沉淀了。还好,最近的日子,充实,开森,爽~Today,不忍我的MBP桌面吃灰且也不想天天背着电脑挤地铁,最关键的还是我想......
  • Android Study 将DB打包APK
    LZ-Say:最近天有点凉了,小风嗖嗖的~各位注意身体~还记得项目中有相关城市以及区县联动显示,之前老版本是将这些内容保存文本,之后读取,转化,显示。挺麻烦的,所以打算直接弄成数据库......
  • Android Study 之学(kao)习(bei)官方关于64k异常处理 ^_^
    LZ-Says:在外面呆了一年又一年,似乎都快忘记当初出来的目的,不过,幸好,不忘初心~给家里买点东西,家里开心,我也开心~这就够了。前言随着APP的一次又一次迭代,APP的体积也越来越大,这......
  • Android Studio 2.3.1 变更SVN项目地址
    LZ-Says:技术前行道路上,真是挖坑不断,踩坑不止,填坑没完。。。前段时间访问SVN,结果看到上面乱糟糟的,这个给我愁的啊,直接归档整理了下。整理之后,之前项目SVN地址也没替换,今天更......
  • 解决Android Studio控制台中文乱码(方框)问题
    LZ-Say:坚持自己的,一步一个脚印努力走下去,加油!最近遇到个恶心的事儿,就使用死丢丢的时候,发现怎么我的控制台输出中文都显示方框???别人都没事,恶心坏我了。经过各种百度,终于找到解......
  • Android Study 之冷启动优化(解决启动短暂白屏or黑屏)
    LZ-Says:话说真正负责项目后才发现,想要软件越来越好,就要从细节抓问题,去解决问题,这样我们的软件才会越来越好~前言今天下班路上闲的无聊随便点了几个app,包括正在负责的几个项......
  • Android Study之总结使用ListView时需要去除相关效果的属性
    LZ-Says:各种忙啊。。。话说虽然之前推出一个RecyclerView替代了ListView以及GirdView,但是ListView依旧是ListView,掌握点相关知识多少还是有点用处的。使用ListView时,不免......
  • Android Study 之 极光推送使用心得以及记录
    LZ-says:啧啧,最近风起云淡,快过年喽~~~又是一件纠结的事儿。。。前言最近项目遇到推送,与后台贱人于一合计,果断采用了极光推送。在使用过程中,有爽有不爽,特意再次记录下。使用记......
  • SCHEDULE_EXACT_ALARM权限在android12.0崩溃的问题
    问题重现简单讲,就是以Android12为目标平台的App,如果使用到了AlarmManager来设置定时任务,并且设置的是精准的闹钟(使用了setAlarmClock()、setExact()、setExactAndAllowW......