关于使用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统一,切记,切记!,希望能帮助到各位!

       

猜你喜欢

转载自blog.csdn.net/wolfking0608/article/details/85462367