android-studio - java.lang.NullPointerException:findViewById(R.id.contactsList) 不能为空
问题描述
我无法从一项活动转移到另一项活动。
这是错误:
E/AndroidRuntime:致命异常:主进程:com.example.mobiledevelopment,PID:7613 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.mobiledevelopment/com.example.mobiledevelopment.SearchContactActivity}:java.lang。 NullPointerException: findViewById(R.id.contactsList) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 在 android.app.servertransaction 不能为空.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app。 ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 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方法)在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 引起:java.lang.NullPointerException:findViewById(R.id.contactsList) 不能为空 在 com.example.mobiledevelopment.SearchContactActivity.readContact(SearchContactActivity.kt:56) 在 com.example.mobiledevelopment.SearchContactActivity.onCreate(SearchContactActivity.kt:30) 在 android.app.Activity.performCreate(Activity.java:8000) 在android.app.Activity.performCreate(Activity.java:7984) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) 在 android.app.ActivityThread .handleLaunchActivity(ActivityThread.java:3601) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction。 TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H。handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java :7656) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:947)
这是我的 SettingsActivity 代码:
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings_activity)
val searchBtn : Button = findViewById(R.id.searchButton)
searchBtn.setOnClickListener {
val intent = Intent(this@SettingsActivity, SearchContactActivity::class.java)
startActivity(intent)
}
}
}
这是我的 SearchContactActivity 代码:
class SearchContactActivity : AppCompatActivity() {
// an array of strings that represents the contact
var cols = listOf( //<String>
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone._ID
).toTypedArray()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// asking for permission to read contacts
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, Array(1) { Manifest.permission.READ_CONTACTS }, 111)
} else
readContact() // row 30
}
// result of permission asking
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 111 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
readContact()
}
private fun readContact() {
var from = listOf<String>(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER).toTypedArray()
var to = intArrayOf(android.R.id.text1, android.R.id.text2)
var rs = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
cols, null, null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
var adapter = SimpleCursorAdapter(this, android.R.layout.simple_list_item_2,
rs,from,to,0)
val contactsList : ListView = findViewById(R.id.contactsList) //row 56
contactsList.adapter = adapter
val searchView : SearchView = findViewById(R.id.searchView)
searchView.setOnQueryTextListener(object: SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(p0: String?): Boolean {
return false
}
override fun onQueryTextChange(p0: String?): Boolean {
var rs = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
cols, "${ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME} LIKE ?", Array(1){"%$p0%"},
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
adapter.changeCursor(rs)
return false
}
})
}
}
解决方案
推荐阅读
- java - 如何检查堆栈的所有元素作为递归的停止条件
- ios - Apple Notes 中的“复选标记”单选按钮如何显示
- c - Blynk_Write 参数进入和中断循环
- python - 如何专门使用 Keras `add_loss`
- c++ - 我应该如何使用 mpfr::mpfr_fac_ui 函数?
- javascript - base64 代码不显示图像 javascript/react
- jasper-reports - 在使用 JRBeanCollectionDataSource 的情况下,如何根据条件在表中插入空行?
- python - 有没有更快的方法来使用 python 镜像 Android 设备?
- c# - 如何验证 DataGridView 的选定单元格或列中现有值的数据类型?
- javascript - 如何解决:教义没有正确返回