Android中解析plist文件使用dd-plist插件,完成spinner省市二級聯(lián)動

由于項(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)目了。然后可以愉快地使用了。

如下圖所示:

使用dd-plist代碼部分

其中本人使用的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ù)。大致是這個樣子的:


Tuple可以擴(kuò)展很多的

沒有辦法插入plist文件。。。。截圖表示吧。


plist--1


plist--2

獲取到了省份,城市的數(shù)據(jù)了,之后的事情就簡單了, 使用spinner獲取到省份的列表,之后再setOnItemSelectedListener中根據(jù)點(diǎn)擊的postion獲取到allList中對應(yīng)的位置的省下面的city列表


spinner根據(jù)position獲取到cityList代碼

這樣就搞定了!

?????? 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,接下來的工作,就要自己開始思考了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多,會對里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,553評論 1 14
  • //1.屬性列表的方式,plist文件。 //輕量級的數(shù)據(jù)涉及到的主要的類NSUserDefaults //存儲數(shù)...
    nothing_c閱讀 236評論 0 0
  • 在程序開發(fā)中,數(shù)據(jù)層永遠(yuǎn)是程序的核心結(jié)構(gòu)之一。我們將現(xiàn)實(shí)事物進(jìn)行抽象,使之變成一個個數(shù)據(jù)。對這些數(shù)據(jù)的加工處理是代...
    帥不過oneS閱讀 640評論 0 1
  • 前言: 以下內(nèi)容是作者在實(shí)際開發(fā)中所總結(jié)的,主要列舉了一些實(shí)用小技巧,也希望在實(shí)際開發(fā)中能夠幫到你。 設(shè)置控件的圓...
    暗香有獨(dú)閱讀 1,399評論 6 33
  • 今天是比較失落的一天,一早把我最重要的最心愛的手機(jī)丟了,覺得自己很沒用,這么重要的東西會讓它離開我,沒有手機(jī)半天時...
    FAB艷兒閱讀 112評論 0 0