刚刚送走2020迎来了2021的第一篇博文
我今天第一次遇到交给我一个.plist文件,当场有点懵,但是遇到问题还是不能回避,就研究了一下,然后做一个博文的记录和分享,希望大家遇到的时候少走弯路.
先简单介绍一下.plist文件 .plist文件在iOS开发中经常用到,但是android开发用的比较少.其实跟xml格式的文件很像.下面给一个venues.plist文件示例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>场馆列表</key>
<array>
<dict>
<key>name</key>
<string>龙泉驿区东安湖体育中心主体育场</string>
<key>prov</key>
<string>四川</string>
<key>city</key>
<string>成都</string>
<key>county</key>
<string>龙泉驿区</string>
<key>street</key>
<string>成都汽车城大道</string>
</dict>
<dict>
<key>name</key>
<string>双流体育中心体育场(比赛场,田径热身场)</string>
<key>lat</key>
<string>30.5702200000</string>
<key>lon</key>
<string>103.8958200000</string>
<key>prov</key>
<string>四川</string>
<key>city</key>
<string>成都</string>
<key>county</key>
<string>双流区</string>
<key>street</key>
<string>东升街办白河路延伸段</string>
</dict>
<dict>
<key>name</key>
<string>棠湖中学体育场(投掷热身场)</string>
<key>prov</key>
<string>四川</string>
<key>city</key>
<string>成都</string>
<key>county</key>
<string>双流区</string>
<key>street</key>
<string>双江路二段188号</string>
</dict>
</array>
</dict>
</plist>
那么android如何把这个类型的文件进行解析呢?
有一个现成的库可以直接用 可以在主module.gradle里面添加依赖
implementation 'com.googlecode.plist:dd-plist:1.21'
文件可以是后台返给app端也可以是放在asset中的
第一种情形: 如果是放在assets中的文件,解析步骤如下
第一步:建立实体javaBean
public class VenuesBean { private String name; private String prov; private String city; private String county; private String street;
// TODO...此处.........getter setter ......略过
}
第二步:打开assets中的文件并开始解析 并把解析的内容封装成实体类 放到list中
List<VenuesBean>venuesList = new ArrayList<>(); NSDictionary dic = (NSDictionary) PropertyListParser.parse(MyApplication.getContext().getAssets().open("venues.plist")); NSArray venueArr = (NSArray) dic.objectForKey("场馆列表"); NSObject[] array = venueArr.getArray(); for (int i = 0; i < array.length; i++) { NSObject nsObject = array[i]; VenuesBean venuesBean = nsObject.toJavaObject(VenuesBean.class); Log.d(TAG, "init: " + venuesBean.toString()); venuesList.add(venuesBean); }
第二种情形: 如果文件是网络获取得到的,解析步骤如下
第一步通过接口把.plist文件下载到app中指定的目录,
第二步:在通过File操作打开文件
File file = new File(downloadPath); FileInputStream downloadFile = new FileInputStream(file); NSDictionary dic = (NSDictionary) PropertyListParser.parse(downloadFile);
第三步:操作同第一种情形把解析的数据装到list中
NSArray venueArr = (NSArray) dic.objectForKey("场馆列表"); NSObject[] array = venueArr.getArray(); for (int i = 0; i < array.length; i++) { NSObject nsObject = array[i]; VenuesBean venuesBean = nsObject.toJavaObject(VenuesBean.class); Log.d(TAG, "init: " + venuesBean.toString()); venuesList.add(venuesBean); }