我有一个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)
}
上下文有问题吗?我真的很困惑 任何见解/解决方案都将非常有帮助。
答案 0 :(得分:0)
Future
或Activity
可能在请求完成执行之前被销毁。您可以检查Fragment
是否不为空:
activity