【发布时间】:2021-05-30 13:53:47
【问题描述】:
我需要帮助,因为我长期面临一个问题,但我无法解决...当我点击一个按钮时,我收到此错误消息并且我的应用程序崩溃:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
at android.app.Activity.startActivityForResult(Activity.java:5251)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
at android.app.Activity.startActivityForResult(Activity.java:5208)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
at android.app.Activity.startActivity(Activity.java:5579)
at androidx.core.content.ContextCompat.startActivity(ContextCompat.java:251)
at fr.amseu.mystretching.adapter.ChooserAdapter$onBindViewHolder$1.onClick(ChooserAdapter.kt:38)
at android.view.View.performClick(View.java:7870)
at android.view.View.performClickInternal(View.java:7839)
at android.view.View.access$3600(View.java:886)
at android.view.View$PerformClick.run(View.java:29363)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7948)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
发生的事情是我在导航栏中有一个项目的回收站视图。我希望当我们单击一个项目时,它会打开一个弹出窗口。但是使用我的代码,当我单击它时,会出现上面的代码。 这是我的弹出活动(我已经简化以找到问题):
class MusclePopup(
private val adapter: ChooserAdapter,
private val currentItem: ChoosersModel
) : Dialog(adapter.context) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.fragment_popup)
setupComponents()
}
private fun setupComponents() {
findViewById<TextView>(R.id.input_chooser).text = currentItem.description
}
}
这是我的适配器活动,与我的点击项目的回收器视图相同:
class ChooserAdapter(
val context: ChooserActivity,
private val ChooseList: ArrayList<ChoosersModel>)
:RecyclerView.Adapter<ChooserAdapter.ViewHolder>(){
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
var chooserNumber: TextView = view.findViewById(R.id.item_number)
var chooserDescription: TextView = view.findViewById(R.id.item_description)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_chooser, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val currentItem = ChooseList[position]
holder.chooserNumber.text = currentItem.number
holder.chooserDescription.text = currentItem.description
holder.itemView.setOnClickListener {
MusclePopup(this, currentItem).show()
}
}
override fun getItemCount(): Int = ChooseList.size
}
通过我的测试,我认为错误来自这一行:
holder.itemView.setOnClickListener {
MusclePopup(this, currentItem).show()
}
如果您需要更多信息,我可以给您,感谢您的帮助!
【问题讨论】:
-
能否请您提供完整的适配器代码。?似乎有些东西是
null很可能是itemView或adapter.context -
完成了@MayurGajra,我的ChooserActivity确实存在
-
给定的代码对我来说效果很好。在项目上单击我会正确显示一个对话框。它到底在哪里崩溃?你想开始一些活动吗?点击哪个按钮会崩溃?
-
我认为不起作用是因为我的活动在导航栏中,所以我不确定它是否利用了我的选择器活动,但只有我的选择器片段? @MayurGajra
-
其实,我是在问,从给定的代码中,您能否指出导致错误的代码行或单击?因为它对我很有效。