Android TV 将Excel表格解析成json文件

Android TV开发,设置模块一般是一个菜单树,也即多级联动菜单,我们可以做成配置项文件,这样做的好处是,不需要根据每个客户需求去控制菜单列表里的菜单项显示隐藏,减少项目维护成本。

那么这个配置项怎么去设计比较好呢?因为需求是产品控制的,我们希望配置项文件由产品来编写和维护,对于产品来说,我们让他去编写json配置文件或者xml文件,有点为难人,术业有专攻,他们更喜欢可视化操作,简单、直观,于是我们想到了Excel表格,因为每次测试的buglist或者产品的功能需求矩阵都是以Excel表形式发给我们的。

按道理来说,我们拿到Menu Tree Excel表,程序去解析这个表格,构建菜单实体类就行了,为什么要再解析成json文件呢?因为每次解析Excel表格获取数据,效率肯定很低,目前知道的Java读取Excel的工具有jxl跟poi方式,两个都有数据量大小限制,并且解析大量数据会很耗时,这个会影响UI绘制,所以我们只希望应用首次安装解析一次产品推送在系统中的Excel表格,然后转成json文件,并保存在系统级别目录中, 以后应用每次启动去解析json配置项获取数据就好。

解析Excel,这里采用jxl,是综合了jxl和poi优缺点以及具体的需求来抉择的。jxl稍微轻量级点,但是不支持xlsx格式,所以只能用 Microsoft Office 2007及之前版本,poi功能强大点,但是要引入的库比较多,使用起来也稍复杂,我们解析Excel表操作一般只会走一次,除非产品变更了需求,会再解析一次,大部分时候,我们程序都是做json转菜单实体类操作。

下面就开始我们的实践吧!

menu tree excel表

这里写图片描述

步骤一:定义菜单实体类

SettingMenuBean

public class SettingMenuBean implements Parcelable {

    public String menuId; //菜单id
    public String parentId; //菜单父级id
    public String menuName; //菜单名
    public String menuIcon; //菜单图标
    public String type; //菜单显示样式
    public List<SettingMenuBean> menus = new ArrayList<>(); //子菜单

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.menuId);
        dest.writeString(this.parentId);
        dest.writeString(this.menuName);
        dest.writeString(this.menuIcon);
        dest.writeString(this.type);
        dest.writeList(this.menus);
    }

    public SettingMenuBean() {
    }

    protected SettingMenuBean(Parcel in) {
        this.menuId = in.readString();
        this.parentId = in.readString();
        this.menuName = in.readString();
        this.menuIcon = in.readString();
        this.type = in.readString();
        this.menus = new ArrayList<>();
        in.readList(this.menus, SettingMenuBean.class.getClassLoader());
    }

    public static final Parcelable.Creator<SettingMenuBean> CREATOR = new Parcelable.Creator<SettingMenuBean>() {
        @Override
        public SettingMenuBean createFromParcel(Parcel source) {
            return new SettingMenuBean(source);
        }

        @Override
        public SettingMenuBean[] newArray(i
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈,柳暗花明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值