[英]Null-Pointer Exception when trying to access an EditText from another activity in 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)
}
是上下文的问题吗? 我真的很困惑。 任何见解/解决方案都会非常有帮助。
Activity
或Fragment
可能会在请求执行完成之前被销毁。 您可以检查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.