首页 > 解决方案 > 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
            }
        })
    }
}

 

标签: android-studiokotlin

解决方案


推荐阅读