解决自定义view引用显示Context.getResources() on a null object reference问题的一种方法

写一个东西,需要一个视频播放器,引用的是基于ijkplayer的gsyvideoplayer。
解决自定义view引用显示Context.getResources() on a null object reference问题的一种方法_第1张图片

本来在app的其他地方都很好的运行,但是在一个页面使用的时候,却爆出了这个错误
这里写图片描述
显然是xml文件的错误,而且错误的定位也正好是上面显示的加入播放器的那一行。于是首先看xml文件是否有问题,但是发现这个地方写的和另一个地方几乎一样,不可能是xml文件的问题

在网络上搜索,都是说是自定义view的构造方法的问题,而这个是第三方的成熟库,不可能出现这种低级问题,况且在其他地方也没有类似的问题。

既然网络上解决不了,只好自己动手

于是接着往下看错误log
解决自定义view引用显示Context.getResources() on a null object reference问题的一种方法_第2张图片
可以看出是getResource方法是一个空引用.顾名思义这个方法是用来获取资源的。点击caused by下面一行的错误发生处。
解决自定义view引用显示Context.getResources() on a null object reference问题的一种方法_第3张图片

可以看到,这个地方是mScreenWidth获取屏幕宽度,其中getResource方法为空,这样来说就是前面的getActivityContext方法有问题。

找到gsyvideoplayer所在的xml文件,它是在一个adapter中通过layoutinflater.from(context).inflate方法来显示。那么问题很明显,就是这个context的问题。

之前为了在一些乱七八糟的地方使用context,就封装了Application.getApplication()来获取context,而在这个地方,需要测量屏幕宽度,则必须是单独activity的context而不能用全局的context。

说到底还是自己大意,而且很多地方并不能直接用application的context,因为这个application的生命周期极长,若是很多地方持有全局的context,过多就会导致内存泄漏或者溢出。

你可能感兴趣的:(解决自定义view引用显示Context.getResources() on a null object reference问题的一种方法)