關於使用alibaba的ARouter 序列化bean,傳遞資料失敗的問題 解決
最近在專案中使用ARouter 時候遇到了一個困擾了我同事一個星期的bug,同事苦思奇想不得其解,找到了我,自認為這種bug,有那麼困難,於是就自己操作了一遍,發現我也傳值不過去,那怎麼解決了
使用ARouter 遇到的坑程式碼:
ARouter.getInstance().build(ARouterPath.SPORT_NORMAL_DETAIL_ACTIVITY).withParcelable("bean",bean)
.withString("xxx");
.navigation();
從程式碼邏輯來看,這是沒有任何問題的,但是就是傳不過去,
開始的思路,是認為 bean是否序列化沒有弄好, 採用AS外掛 Parcelable 把程式碼再序列化了一遍, 還是不行
然後開啟了第二條思路:
@Autowired(name="bean")
NormalTransactionsBean bean;//這裡的 這個屬性名要和傳入的key值統一,不然值是傳不過來的.
執行後,程式閃退 其實 寫上 @Autowired(name="bean"),是應該採用withObject 的方式時候使用的,) 根據試驗結果,這條路走不通
注意事項: 看程式碼註釋
思路三:
採用withObject的方式傳值,試驗結果,還是不行
思路四:
我在想這也不行,那也不行,老子不用你這個破玩意了,突然之間我豁然開朗了,用Intent傳值過去,不就行了,非要用這個中心路由麼? 此處不留爺,必有留爺處. 試驗結果,傳值成功!
思路五:
我是一個特別不服輸的人,你不讓我行,老子偏偏要搞你, 反正老子已經可以傳值過去了, 我就一直在想為啥傳不過去啊,晚上做夢也在想解決辦法,為啥以前可以傳值過去,現在多一個引數就傳不過呢, 什麼?突然大腦通透了,多一個引數就失敗,那我不要這個引數,或者把這個引數寫到bean裡面,這樣和我以前能傳值的程式碼一模一樣,這樣不就可以了麼.我開始仿 ,結果一仿,特麼成功了!
NormalTransactionsBean bean = (NormalTransactionsBean) adapter.getDatas().get(position);
bean.setStatus((Double) allDatas.get("status"));
ARouter.getInstance().build(ARouterPath.SPORT_NORMAL_DETAIL_ACTIVITY).withParcelable("bean",bean)
.navigation();
在這裡遇到了這個坑終於圓滿解決了. 並以此記錄, 在這裡,我想重要的不是答案,而是思路,感謝自己,思路比以前多了很多,不會一條道走到黑,這種思路才是我解決這個小問題的根本,以此銘記,感謝一直堅持寫部落格反省的自己,加油,千夜!
備註事項:
在序列化bean的時候,要給他弄一個空參構造,沒有的話,也會導致傳值不過去; 其中傳值作為key的bean ,在另外也的屬性的時候
一定要這麼寫:
@Autowired
NormalTransactionsBean bean;
否者坑你跳不過來, 這個屬性名,不能隨便命名的,要和你傳值的key統一,切記,切記!,希望能幫助到各位!