簡體   English   中英

嘗試打開活動時 Kotlin 空指針異常

[英]Kotlin Null Pointer Exception when trying to open Activity

我有一個 FRAGMENT,它是一個 RecyclerView,所以它有一個適配器。 在 onBindViewHolder() 中,我在父布局上設置了一個偵聽器,以便在單擊它時打開一個新的 ACTIVITY。 這是代碼

  override fun onBindViewHolder(holder: HomeViewHolder, position: Int) {
    val restaurant = itemList[position]
    holder.txtResName.text = restaurant.resName
    holder.txtResCostForOne.text = "\u20B9" + restaurant.resCostForOne + " per person"
    holder.txtResRating.text = restaurant.resRating

    Picasso.get().load(restaurant.resImage).error(R.drawable.default_image_restaurant)
        .into(holder.imgResImage)

    holder.llParent.setOnClickListener {
        val intent = Intent(context, FoodListActivity::class.java)    <---/*here is the listener with context*/
        intent.putExtra("resId", restaurant.resId)
        intent.putExtra("resName", restaurant.resName)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        context.startActivity(intent)
    }

現在,當我嘗試從上述活動轉移到另一個新活動時,應用程序崩潰並且錯誤發生在我開頭提到的 FRAGMENT 中。

以下是 logcat 錯誤:

  kotlin.KotlinNullPointerException
    at com.sapcodestudio.foodpi.fragment.HomeFragment$onCreateView$jsonObjectRequest$2.onResponse(HomeFragment.kt:108)
    at com.sapcodestudio.foodpi.fragment.HomeFragment$onCreateView$jsonObjectRequest$2.onResponse(HomeFragment.kt:81)

這是顯示錯誤的片段中的代碼:

     val queue = Volley.newRequestQueue(activity as Context)

        val url = "http://13.235.250.119/v2/restaurants/fetch_result/"

        if (ConnectionManager().checkConnectivity(activity as Context)) {
                val jsonObjectRequest = object : JsonObjectRequest(           <----//ERROR- kt.81     
                Request.Method.GET, url, null,
                Response.Listener {
                    try {
                        progressLayout.visibility = View.GONE
                        val dataObject = it.getJSONObject("data")
                        val success = dataObject.getBoolean("success")

                        if (success) {
                            val data = dataObject.getJSONArray("data")


                            for (i in 0 until data.length()) {
                                val resJsonObject = data.getJSONObject(i)

                                val resObject = Restaurant(
                                    resId = resJsonObject.getString("id"),
                                    resName = resJsonObject.getString("name"),
                                    resRating = resJsonObject.getString("rating"),
                                    resCostForOne = resJsonObject.getString("cost_for_one"),
                                    resImage = resJsonObject.getString("image_url")
                                )
                                resInfoList.add(resObject)
                            }
                                displayList.addAll(resInfoList)

                                recyclerAdapter =
                                    HomeRecyclerAdapter(activity as Context, displayList)   <---// ERROR-kt.108

                                recyclerHome.adapter = recyclerAdapter
                                recyclerHome.layoutManager = layoutManager

                        } else {
                            if (activity != null) {
                                Toast.makeText(
                                    activity as Context,
                                    "Some error occurred",
                                    Toast.LENGTH_SHORT
                                ).show()
                            }
                        }
                    } catch (e: JSONException) {
                        Toast.makeText(
                            activity as Context,
                            "Some unexpected error occurred",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                },
                Response.ErrorListener {
                    Toast.makeText(
                        activity as Context,
                        "Volley error occurred",
                        Toast.LENGTH_SHORT
                    ).show()
                }) {

                override fun getHeaders(): MutableMap<String, String> {
                    val headers = HashMap<String, String>()

                    headers["Content-type"] = "application/json"
                    headers["token"] = "TOKEN"
                    return headers
                }
            }

            queue.add(jsonObjectRequest)
        }

是上下文的問題嗎? 我真的很困惑。 任何見解/解決方案都會非常有幫助。

ActivityFragment可能會在請求執行完成之前被銷毀。 您可以檢查activity是否不為空:

val a = activity
if (a != null) {
    recyclerAdapter = HomeRecyclerAdapter(a, displayList) 
    recyclerHome.adapter = recyclerAdapter
    recyclerHome.layoutManager = layoutManager
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM