Intent數(shù)據(jù)傳輸:超簡潔

用Intent傳輸數(shù)據(jù)是安卓常用技術之一,通常的方法是聲名一堆鍵名(key_name)凯沪,把數(shù)據(jù)存儲到Intent中第焰,然后在其它地方根據(jù)鍵名和類別讀取。

示例如下:

val KEY_USER_NAME = "key_user_name"
val KEY_USER_PWD = "key_user_pwd"
val KEY_USER_NEW = "key_user_new"

val intent = Intent()
intent.putExtra(KEY_USER_NAME, "name")
intent.putExtra(KEY_USER_PWD, 123)
intent.putExtra(KEY_USER_NEW, true)

val name = intent.getStringExtra(KEY_USER_NAME)
val pwd = intent.getIntExtra(KEY_USER_PWD, -1)
val newUser = intent.getBooleanExtra(KEY_USER_NEW, false)

雖然取鍵名很簡單妨马,但如果取太多的話挺举,就不知道取什么好了,到最后可能干脆直接用‘KEY_1’什么的烘跺。取無意義鍵名湘纵,容易出現(xiàn)用錯名或類型錯誤的問題,怎么破滤淳?用XIntent傳輸數(shù)據(jù)梧喷,超簡潔!

啟動Activity

//直接啟動新頁面脖咐,可以把數(shù)據(jù)跟在后面
XIntent.startActivity(this, MainActivity::class, name, pwd, newUser)

//startActivityForResult方式啟動
val intent = XIntent(this, MainActivity::class, name, pwd, newUser)
startActivityForResult(intent, 1)

//讀取上個頁面?zhèn)鬟^來的數(shù)據(jù)
XIntent.with(this).apply {
    val name: String = readExtra()!!
    val pwd: Int = readExtra()!!
    val newUser: Boolean = readExtra()!!
}

SaveInstanceState

override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle?) {
    super.onSaveInstanceState(outState, outPersistentState)
    val saveTime = System.currentTimeMillis()
    val user = "userName"
    val pwd = 123
    val newUser = true
    XIntent.with(outState).putSerializableExtra(saveTime, user, pwd, newUser)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle, persistentState: PersistableBundle?) {
    super.onRestoreInstanceState(savedInstanceState, persistentState)
    XIntent.with(savedInstanceState).apply {
        val saveTime: Long? = readExtra()
        val user: String? = readExtra()
        val pwd: Int? = readExtra()
        val newUser: Boolean? = readExtra()
    }
}

ActivityResult

//setResult
XIntent.with().apply {
    val backTime = System.currentTimeMillis()
    putSerializableExtra(backTime)
    setResult(RESULT_OK, this)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    val backTime: Long? = XIntent.with(data).readExtra()
}

方法說明

//支持三種類型參數(shù)
XIntent.with(Activity | Intent? | Bundle): IntentWrapper

IntentWrapper{
    //請確保傳入?yún)?shù)都能強制轉換為serializable铺敌,支持 List<String>,不支持 List<Activity>
    fun putSerializableExtra(vararg serializable: Any?)
    fun getSerializableExtra(): Array<Serializable?>?
    //根據(jù)數(shù)據(jù)類型讀取屁擅,注:不支持 List 類型(能讀到數(shù)據(jù)适刀,但List的泛型無法讀到)
    inline fun <reified T : Serializable> readExtra(defaultValue: T? = null): T?
    //根據(jù) Index 讀取類型重復的數(shù)據(jù)
    inline fun <reified T : Serializable> readExtra(index: Int, defaultValue: T? = null): T?
    inline fun <reified T : Serializable> readExtraList(): List<T>
}

Gradle dependency

最新版本-jitpack

XIntent-github

allprojects {
    repositories {
        mavenLocal()
        maven { url 'https://jitpack.io' }//add to project build.gradle
    }
}

compile 'com.github.DonaldDu:XIntent:x.x.x'//add to module build.gradle

最后

如果本文幫助到了你,也幫我點個贊吧煤蹭!

如果你愿意笔喉,還可以贊賞一杯咖啡或一瓶水,非常感覺你的慷慨硝皂!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末常挚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子稽物,更是在濱河造成了極大的恐慌奄毡,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贝或,死亡現(xiàn)場離奇詭異吼过,居然都是意外死亡,警方通過查閱死者的電腦和手機咪奖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門盗忱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人羊赵,你說我怎么就攤上這事趟佃。” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵闲昭,是天一觀的道長罐寨。 經常有香客問我,道長序矩,這世上最難降的妖魔是什么鸯绿? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮簸淀,結果婚禮上楞慈,老公的妹妹穿的比我還像新娘。我一直安慰自己啃擦,他們只是感情好囊蓝,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著令蛉,像睡著了一般聚霜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上珠叔,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天蝎宇,我揣著相機與錄音,去河邊找鬼祷安。 笑死姥芥,一個胖子當著我的面吹牛,可吹牛的內容都是我干的汇鞭。 我是一名探鬼主播凉唐,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼霍骄!你這毒婦竟也來了台囱?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤读整,失蹤者是張志新(化名)和其女友劉穎簿训,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體米间,經...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡强品,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了屈糊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片的榛。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖另玖,靈堂內的尸體忽然破棺而出困曙,到底是詐尸還是另有隱情,我是刑警寧澤谦去,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布慷丽,位于F島的核電站,受9級特大地震影響鳄哭,放射性物質發(fā)生泄漏要糊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一妆丘、第九天 我趴在偏房一處隱蔽的房頂上張望锄俄。 院中可真熱鬧,春花似錦勺拣、人聲如沸奶赠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毅戈。三九已至,卻和暖如春愤惰,著一層夾襖步出監(jiān)牢的瞬間苇经,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工宦言, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扇单,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓奠旺,卻偏偏與公主長得像蜘澜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子响疚,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內容