由于項(xiàng)目的需求,需要一個省市的二級聯(lián)動,本來已經(jīng)做好了,最后傳值的時候發(fā)現(xiàn)綁定不成功。當(dāng)時就郁悶了。最后發(fā)現(xiàn)問題出在我的省市文件了。。。作者之前用的讀取txt文本(json格式的)使用Gson轉(zhuǎn)化成javabean。。。然后問了問,發(fā)現(xiàn)iOS哪兒有省市文件,為了保持統(tǒng)一就從那邊弄了一份,看了一下是plist。哎、、、不知道怎么辦,上網(wǎng)搜了搜,各種抄襲啊!代碼什么的都一樣,這樣的環(huán)境真的好嗎?這樣的方式真的好嗎???大家都在使用android-plist-parser。各種文章啊,打開一看代碼一模一樣,有意思嗎???
今天給大家介紹一個新的解析plist的插件,貌似是谷歌提供的,叫做:googlecode.plist:dd-plist。
在android studio中直接使用:compile'com.googlecode.plist:dd-plist:1.16' 這樣就引入項(xiàng)目了。然后可以愉快地使用了。
如下圖所示:
其中本人使用的plist中state:省份 ?;cities:城市
省份的獲取沒問題,主要問題出在了城市的獲取。本人想的是,將省份,與城市綁定在一個list中。
先用NSArray ary獲取到當(dāng)前的索引下的數(shù)據(jù)信息。之后使用NSDictionary轉(zhuǎn)化為字典類型。然后使用字典類型下的objectForKey的方法獲取到鍵名為“cities”的數(shù)據(jù)信息。這個時候他還是NS類型的,使用toJavaObject轉(zhuǎn)化為java格式下的類型。因?yàn)槌鞘校隙ㄊ且粋€array,使用Object[]接受,之后使用的時候使用強(qiáng)制轉(zhuǎn)換就可以了。
Tuple<String,List<String>> 這個是引入了C#中的元組概念,方便我們來回的存儲數(shù)據(jù)。大致是這個樣子的:
沒有辦法插入plist文件。。。。截圖表示吧。
獲取到了省份,城市的數(shù)據(jù)了,之后的事情就簡單了, 使用spinner獲取到省份的列表,之后再setOnItemSelectedListener中根據(jù)點(diǎn)擊的postion獲取到allList中對應(yīng)的位置的省下面的city列表
這樣就搞定了!
?????? 2017/11/10更新一下。目前dd-plist插件已經(jīng)升級到了1.20。在此版本下內(nèi)部方法有些不同了。上面只是說了array下面有個dict的情況,下面來說一下這種情況:
ok,開頭現(xiàn)在項(xiàng)目的build文件中添加依賴:
compile group:'com.googlecode.plist', name:'dd-plist', version:'1.20'
最新版的寫法。。。。
在此文件中,key:dataSource,value:array。在這個array中,裝入的是字典(dict)。
下面是新版的解決辦法:
```
NSArray ary = (NSArray) PropertyListParser.parse(getAssets().open("new.plist"));
for(inti =0;i < ary.count();i++) {//遍歷當(dāng)前NSArray
//將當(dāng)前遍歷的結(jié)果也是字典。將其存放入dic(字典)中保存
NSDictionary dic = (NSDictionary) ary.objectAtIndex(i);
//獲取key:project的value值。
String project = (dic.objectForKey("project")).toJavaObject().toString();
//獲取key:dataSource的value。
// 分析plist文件得到value為array類型(每一個數(shù)據(jù)是NSDictionary類型)
NSArray tmpAry = (NSArray) dic.objectForKey("dataSource");
for(intj =0;j < tmpAry.count();j++) {
NSDictionarysecDic= (NSDictionary) tmpAry.objectAtIndex(j);
String name = (secDic.objectForKey("name")).toJavaObject().toString();
String sex = (secDic.objectForKey("sex")).toJavaObject().toString();
String birthday = (secDic.objectForKey("birthday")).toJavaObject().toString();
String others = (secDic.objectForKey("others")).toJavaObject().toString();
}
}
```
不會排版。。。。。求賜教。。。。。
這樣就解析出來了,array中的dict嵌套一個array
現(xiàn)在已經(jīng)獲得了value,接下來的工作,就要自己開始思考了