关于使用alibaba的ARouter 序列化bean,传递数据失败的问题 解决

在项目中使用 ARouter 遇到了无法序列化bean传递数据的bug。尝试了更新序列化方式、使用@Autowired和withObject等方式都未解决问题。最终通过Intent成功传递值,同时发现bean需有空参构造,属性名与key一致才能避免坑。此经验分享旨在强调解决思路的重要性。

最近在项目中使用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统一,切记,切记!,希望能帮助到各位!

       

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值