ARouter Autowired 易错点

2,352 阅读1分钟

最近在arouter 和kotlin 结合使用过程中犯了个错

1、问题场景如下

我通过Arouter 路由框架中 autowired 注解传递一个参数“class_id”,由A --> B

变量 classId 是可以赋初始值的,此处我给了它一个默认的值 “21”,

那么,如果A界面跳转B 界面,这个“class_id”属性如果不传,那么我们在B界面中使用这个classId 的值是什么呢?

-----------------------------------------------------------------------------------------

2、结论:

如果你不传这个属性,那么这个值在B界面使用的时候,是null

我使用不慎,在调用这个参数进行操作的时候,直接就是一个空指针异常.

------------------------------------------------------------------------------------------------

3、为什么呢?

分析下源码:

ARouter 注入源码分析

上面其实就是一行关键代码**ARouter.getInstance().inject(this)**;,所以我们跟进去看看,来到ARouter的代理类_ARouter中,首先通过以来查找获取AutowiredService的具体实现类,然后得到实例

追进去看

这个TestActivity3ARouterARouterAutowired.java,就是编译器生成的

这个“class_id”就是 我在代码中需要传递的字段,getStringExtar 默认就是null,赋初值是没有用滴。

这就真相了,多么痛的领悟还是老老实实判空吧。。

顺带再总结下ARouter inject 注入流程: