持续创造,加速成长!这是我参加「日新方案 10 月更文应战」的第10天,点击检查活动概况,希望大家多多支持,帮助点个赞,谢谢!
前言
偷得浮生半日闲,早上在逛StackOverflow的时候发现有人求助,提到了一个不怎么火的ImagePicker库:

正篇
来龙去脉
看完问题后,我便按着链接寻了过去,看了半响感觉是比ImagePicker多一些便利的当地。但帖子的问题其实还是和ImagePicker有关。

private val imagePicker: ImagePicker = registerImagePicker(this)
show me Force close.即在它的应用中添加了一行关于ImagePicker的代码后就直接导致应用强制封闭。
一看到强制封闭,我第一反应就是空指针或许尚未初始化便调用。
然后我就看了一下答案,有两个答复,其实意思都差不多,不过是给出了两个方案。
解决方法
方法1:答复的人第一句就点名了原因:The reason isis callingto 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:可能是过于简洁,提问的人没有认可该答案

private val imagePicker: ImagePicker = registerImagePicker(requireActivity)
private val imagePicker: ImagePicker = registerImagePicker(requireContext)
这个答复确实不如上一个,没有详细到方法中的原因。
小结
工作中有时候会很忙,但相同收成许多,而难得闲下来通过看博客和问答社区提升自己也是极好的,我们要抓住这些日常的小细节记录下来,这样才能再往后回忆知识时不发生既视感!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。