天天看點

《Android 應用案例開發大全(第二版)》——6.8節傳遞附加資料(Extra)

本節書摘來自異步社群《android 應用案例開發大全(第二版)》一書中的第6章,第6.8節傳遞附加資料(extra) ,作者李甯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

6.8 傳遞附加資料(extra)

android開發權威指南(第二版)

在顯示視窗時通常可以使用如下兩種方式向視窗傳遞資料。

通過data傳遞資料。

通過putextra傳遞附加資料。

第1種方法在前面已經多次使用過了,通過data傳遞資料實際上就是通過uri将資料傳遞給視窗。例如,傳遞電話号可以用“tel:12345678”。第1種方式雖然傳遞資料比較友善,但隻能傳遞有限的資料,如果要傳遞的資料量比較大,而且資料類型比較多(如int、boolean、byte[]等類型),就要使用第2種方式傳遞附加資料。

intent類有多個重載的putextra方法,這些方法用于向intent對象寫入不同類型的資料,putextra方法有兩個參數,第1個參數是key,第2個參數是value。也就是putextra方法會将一個key-value,類型的資料存入intent對象,然後intent.getxxxextra方法可以通過key擷取value。其中xxx表示int、char、string等。例如,getintextra、getcharextra和getstringextra都是這種類型的方法。getxxxextra方法也有兩個參數1,第1個參數是key,第2個參數是defaultvalue。當intent對象中沒有key時就傳回defaultvalue。

下面的代碼使用putextra方法寫入了string、int和char類型的資料,并使用getxxxextra方法擷取了這些資料。

讀取通過bundle對象寫入的資料時可以用intent.getxxxextra方法,也可以通過intent.getextras方法擷取bundle對象後,然後再通過bundle.get或bundle.getxxx方法(其中xxx表示string、int等字元串)擷取相應的資料。其中bundle.get方法隻傳回一個object對象,可以封裝任何類型的資料。而bundle.getxxx方法通常有兩個重載形式,一個沒有預設值(隻有一個參數用于傳遞key),另外一個有兩個參數,一個是key,另一個是defaultvalue。

實際上,intent.putextra和bundle.putxxx方法本質上是一樣的,如果不用intent.putextras方法設定bundle對象,intent會在内部建立一個新的bundle對象。如果設定了bundle對象,intent就直接使用該bundle對象。這一點從intent.putextra和intent.putextras方法的源代碼就可以看出。

要注意的是,如果通過key擷取的value的資料類型與傳回值資料類型不同時,并不會進行類型轉換,而會傳回預設值,或傳回null(對于字元串類型的value)。例如,下面的代碼中盡管key存在,但由于類型不比對,是以仍然傳回int的預設值。

1 getstringextra方法是個例外,該方法隻有一個參數,沒有預設值。

繼續閱讀