android - 有时我的应用程序在使用改造检索数据时崩溃:D/AndroidRuntime: 关闭 VM?
问题描述
这是我的改造检索代码:
错误来自这一行 ==>> val respon = response.body()!!
(com.xfath.hormart.fragments.homechildfragments.ChildHomeFragment$getProducts$1.onResponse(ChildHomeFragment.kt:124)的 java.lang.NullPointerException
class ChildHomeFragment : Fragment(){
private lateinit var s: SharedPreference
private var listImageSliderHomes: ArrayList<ImageSliderHome> = ArrayList()
private var listProducts: ArrayList<Products> = ArrayList()
private lateinit var sliderView: SliderView
private lateinit var rvProductBaru: RecyclerView
private lateinit var rvElektronik: RecyclerView
private lateinit var rvPribadi: RecyclerView
private lateinit var ivNotif: ImageButton
private lateinit var uidhome: TextView
private lateinit var svhome: NestedScrollView
private lateinit var mSearchView: SearchView
private lateinit var mSwipeRefreshLayout: SwipeRefreshLayout
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
getSlideImage()
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_child_home, container, false)
init(view)
getProducts()
swipeRefresh()
s = SharedPreference(activity!!)
return view
}
private fun getProducts() {
ApiConfig.instanceRetrofit.getproduct().enqueue(object : Callback<ResponseModel> {
override fun onResponse(call: Call<ResponseModel>, response: Response<ResponseModel>) {
val respon = response.body()!!
if (respon.success == 1) {
listProducts = respon.products
displayProduct()
}
}
override fun onFailure(call: Call<ResponseModel>, t: Throwable) {
Log.v(TAG, "Error:" + t.message)
}
})
}
private fun displayProduct() {
val layoutManager = LinearLayoutManager(activity)
layoutManager.orientation = LinearLayoutManager.HORIZONTAL
rvProductBaru.adapter = ProductAdapter(listProducts)
rvProductBaru.layoutManager = layoutManager
}
}
提前致谢..
解决方案
这意味着response.body()
返回 null。您应该始终对其进行空值检查,或者您可以使用它let
来避免 NPE。
PS:避免!!
在 kotlin 中使用,因为它可能会在变量为空时抛出 NPE。
response.body()?.let { respon ->
if (respon.success == 1) {
listProducts = respon.products
displayProduct()
}
}
推荐阅读
- flutter - 如何使用颤振获取所有键:值保存在共享首选项中?
- aframe - 有没有办法在移动设备上查看 A-Frame 检查器?
- string - 带我了解字符串重叠算法
- flutter - flutter : 如何翻转这个路径剪辑 Bezier
- c - 如何使用 gzip 压缩和分块传输编码修复来自 c 套接字 http 服务器的图像中的奇怪失真
- javascript - 如何在 ejs 模板中从 mysql 数据库中呈现值
- javascript - 更改按钮的方向
- .net - 如何从 .NET (C#) 程序(在 Linux 下)调用本机(C 或汇编)代码?
- c++ - 为什么访问未初始化数组中的元素会输出奇怪的值?
- php - 致命错误:composer.lock 是为 PHP 7.4 或更高版本创建的,但当前 PHP 版本是 7.1.33