Android中Kotlin传递ArrayAdapter给ListView时遇空指针异常
解决ListView.setAdapter()空指针异常(NullPointerException)
问题原因
空指针异常的直接原因是未在onCreate方法中调用setContentView()加载布局文件,导致findViewById<ListView>(R.id.myList)无法找到对应的控件,返回null,后续调用lv.adapter = myAdapter时触发异常。
修复后的代码
修改MainActivity,在调用findViewById前添加布局加载代码:
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.ArrayAdapter import android.widget.ListView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 核心:绑定布局文件与Activity val lv = findViewById<ListView>(R.id.myList) val array = arrayOf("test", "test", "test", "test", "test") val myAdapter: ArrayAdapter<String> = ArrayAdapter(this, android.R.layout.simple_list_item_1, array) lv.adapter = myAdapter } }
说明
setContentView(R.layout.activity_main)的作用是告诉系统当前Activity要使用哪个布局文件渲染界面,必须在所有控件查找操作之前调用。- 确保
R.layout.activity_main中的布局文件名和你实际的布局文件一致(如果你的布局文件名不是activity_main.xml,替换为对应的名称即可)。
报错信息翻译
Caused by: java.lang.NullPointerException: 尝试对空对象引用调用虚拟方法 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' at com.example.myapplication5.MainActivity.onCreate(MainActivity.kt:16) at android.app.Activity.performCreate(Activity.java:7994) at android.app.Activity.performCreate(Activity.java:7978) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 2022-12-25 14:33:52.075 14422-14438/com.example.myapplication5 W/System: 一个资源调用close失败。
内容的提问来源于stack exchange,提问作者Ishak Harichane
相关产品推荐
相关产品推荐

