问题场景
前几天写一个界面的时候,遇到一个非常奇葩的问题。app第一次安装的时候,这里针对用户第一次安装的时候,后来是不会出现这个问题了。我明明是对某个界面的一个textview赋值了,而且服务端也返回了值了,我都debug了,那一行代码是运行的,但是始终返回的都是null.我纳闷了半天,为啥呢? 我一直debug了好几遍啊,没错啊,什么原因啊。难道我今天撩妹了吗?不再帅了吗?我偷人家桌子零食遭报应了吗?不不,不会的。即使我真的干了缺德的事了,这个代码是没错啊。我后来继续看下面代码,发现这个textview在多个地方要被赋值,那么也就是说这个textview要在不同的场景获取值。我又发现这个值都是同一个,就是一个电话号码。那么为什么被多次赋值呢,这是因为从不同的入口进入这个页面的,获取值的方式也不一样。而我当时的场景是这样的: 我从A页面进入C页面,那个textview确实拿到值了,但是这个textview在下面又被赋值了,这个是B页面进入到C页面的,而B页面还没请求服务端呢,它的值当然是null了。那么问题来了:为什么不把这个电话号码拿到之后存起来放在sp或者sqlite3作为一个全局的值?因为第一次app启动的时候,有的用户有可能从a进入c,有的用户可能从b进入c,场景不一样,所以就两个地方都需要请求电话号码的值,我后来给后端的同学建议能不能把这个号码放在启动页面那个接口里,因为这个界面是最初始且是必然经过的页面。这样就后端不用到处存号码了,方便后来人维护代码,不然会好奇,为啥要多个地方返回电话号码呢?
一点思考
我后来仔细做出总结:一般会有两种情况导致的 1.该控件在多处被赋值,即使被赋有效值了,但是在其他地方被覆盖了。2.虽然有值了,但是可惜的是,给其他的控件赋值了,也就是控件的id搞错了,出现张冠李戴了。虽然问题很简单,但是的确要细心。这些是在下班的路上想的,晚上记录下,就当笔记吧。