1. 程式人生 > >關於使用alibaba的ARouter 序列化bean,傳遞資料失敗的問題 解決

關於使用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統一,切記,切記!,希望能幫助到各位!