持续创造,加速成长!这是我参加「日新方案 10 月更文应战」的第10天,点击检查活动概况,希望大家多多支持,帮助点个赞,谢谢!

前言

偷得浮生半日闲,早上在逛StackOverflow的时候发现有人求助,提到了一个不怎么火的ImagePicker库:

ImagePicker在安卓上对图片的应用一例
心想这个库说不定是什么好东西,说不定有所收成,所以我就持续观望了下去。

正篇

来龙去脉

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

ImagePicker在安卓上对图片的应用一例
问题的关键:In my application I want use this library for ImagePicker : But after add this lineprivate val imagePicker: ImagePicker = registerImagePicker(this)show me Force close.
即在它的应用中添加了一行关于ImagePicker的代码后就直接导致应用强制封闭。
一看到强制封闭,我第一反应就是空指针或许尚未初始化便调用。

然后我就看了一下答案,有两个答复,其实意思都差不多,不过是给出了两个方案。

解决方法

方法1:答复的人第一句就点名了原因:The reason isis callingto get the Context.

ImagePicker在安卓上对图片的应用一例
并且给出了原因与示例:

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:可能是过于简洁,提问的人没有认可该答案

ImagePicker在安卓上对图片的应用一例
答复的人也说明是context为正确获取,让他将this改成对应activityfragment上下文

private val imagePicker: ImagePicker = registerImagePicker(requireActivity)
 private val imagePicker: ImagePicker = registerImagePicker(requireContext)

这个答复确实不如上一个,没有详细到方法中的原因。

小结

工作中有时候会很忙,但相同收成许多,而难得闲下来通过看博客和问答社区提升自己也是极好的,我们要抓住这些日常的小细节记录下来,这样才能再往后回忆知识时不发生既视感!