ImagePicker在安卓上对图片的应用一例

1,085 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情,希望大家多多支持,帮忙点个赞,谢谢!

前言

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

image.png 心想这个库说不定是什么好东西,说不定有所收获,于是我就继续观望了下去。

正篇

来龙去脉

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

image.png 问题的关键: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.

image.png 并且给出了原因与示例:

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

image.png 回答的人也说明是context为正确获取,让他将this改成对应activityfragment的上下文:

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

这个回答的确不如上一个,没有具体到方法中的原因。

小结

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