前言
偷得浮生半日闲,早上在逛StackOverflow的时候发现有人求助,提到了一个不怎么火的ImagePicker库:
心想这个库说不定是什么好东西,说不定有所收获,于是我就继续观望了下去。
正篇
来龙去脉
看完问题后,我便按着链接寻了过去,看了半天感觉是比ImagePicker多一些方便的地方。但帖子的问题其实还是和ImagePicker有关。
问题的关键:In my application I want use this library for ImagePicker : But after add this line private val imagePicker: ImagePicker = registerImagePicker(this)
show me Force close.
即在它的应用中添加了一行关于ImagePicker的代码后就直接导致应用强制关闭。
一看到强制关闭,我第一反应就是空指针或者尚未初始化便调用。
然后我就看了一下答案,有两个回答,其实意思都差不多,不过是给出了两个方案。
解决方法
方法1:回答的人第一句就点名了原因:The reason is is calling to get the Context.
并且给出了原因与示例:
fun Fragment.registerImagePicker(callback: ImagePickerResultListener): ImagePicker { return ImagePicker(callback, requireActivity()) }
class FragmentB : Fragment(), ImagePickerResultListener { private lateinit var imagePicker: ImagePicker override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) imagePicker = registerImagePicker(this) } }
我是用Java写安卓的,所以这几行代码我也不大清晰,但结合回复者语义,应该是让寻助者把这行出错代码转移到fragment lifecycle.onViewCreated()
中,放到这里面去初始化。 而答案2:可能是过于简洁,提问的人没有认可该答案
回答的人也说明是context为正确获取,让他将this改成对应activity或fragment的上下文:
private val imagePicker: ImagePicker = registerImagePicker(requireActivity)
private val imagePicker: ImagePicker = registerImagePicker(requireContext)
这个回答的确不如上一个,没有具体到方法中的原因。
小结
工作中有时候会很忙,但同样收获很多,而难得闲下来通过看博客和问答社区提升自己也是极好的,我们要抓住这些日常的小细节记录下来,这样才能再往后回忆知识时不产生既视感!