I am not able to move from one activity to another.
Here is the error:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.mobiledevelopment, PID: 7613 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mobiledevelopment/com.example.mobiledevelopment.SearchContactActivity}: java.lang.NullPointerException: findViewById(R.id.contactsList) must not be null at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) 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) Caused by: java.lang.NullPointerException: findViewById(R.id.contactsList) must not be null at com.example.mobiledevelopment.SearchContactActivity.readContact(SearchContactActivity.kt:56) at com.example.mobiledevelopment.SearchContactActivity.onCreate(SearchContactActivity.kt:30) at android.app.Activity.performCreate(Activity.java:8000) at android.app.Activity.performCreate(Activity.java:7984) 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)
Here is my SettingsActivity code:
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)
}
}
}
Here is my SearchContactActivity code:
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
}
})
}
}