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