首页 > 解决方案 > 有时我的应用程序在使用改造检索数据时崩溃: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

}

}

提前致谢..

标签: androidretrofit

解决方案


这意味着response.body()返回 null。您应该始终对其进行空值检查,或者您可以使用它let来避免 NPE。

PS:避免!!在 kotlin 中使用,因为它可能会在变量为空时抛出 NPE。

response.body()?.let { respon -> 
    if (respon.success == 1) {
       listProducts = respon.products
       displayProduct()
    }
}

推荐阅读