尝试打开“活动”时出现Kotlin空指针异常

时间:2020-07-23 20:43:32

标签: android kotlin nullpointerexception

我有一个RecyclerView的FRAGMENT,所以它有一个适配器。在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)
        }

上下文有问题吗?我真的很困惑 任何见解/解决方案都将非常有帮助。

1 个答案:

答案 0 :(得分:0)

FutureActivity可能在请求完成执行之前被销毁。您可以检查Fragment是否不为空:

activity
相关问题