I want to run an application on my android device, when I run it through android studio suddenly the application cannot be opened (even though the application can be installed). Can anyone help me solve this problem?
================================ MainActivity.kt
package com.rifqi_19104031.modul5
import android.*
class MainActivity : AppCompatActivity() {
// deklarasi atribut (id xml)
private lateinit var inputProdi : EditText
private lateinit var btnProdi : Button
private lateinit var btnCallBrowser : Button
private lateinit var btnCallCamera : Button
private lateinit var inputPhoneNumber : EditText
private lateinit var btnCallPhone : Button
private lateinit var btnFragment : Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// menambahkan fungsi untuk button prodi
btnProdi.setOnClickListener {
val namaProdi = inputProdi.text.toString()
if (namaProdi.isEmpty()) {
inputProdi.error = "Prodi Tidak Boleh Kosong"
return@setOnClickListener
}
val moveWithDataIntent = Intent(this@MainActivity, MainActivityReadData::class.java)
moveWithDataIntent.putExtra(MainActivityReadData.EXTRA_PRODI, namaProdi)
startActivity(moveWithDataIntent)
}
// membuka web ittp
btnCallBrowser.setOnClickListener{
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("http://ittelkom-pwt.ac.id/")
startActivity(intent)
}
// menjalankan kamera perangkat
btnCallCamera.setOnClickListener{
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivity(intent)
}
// menjalankan call phone perangkat
btnCallPhone.setOnClickListener{
val phoneNumber = inputPhoneNumber.getText()
if (phoneNumber.isEmpty()) {
inputPhoneNumber.error = "Nomor Telpon Tidak Boleh Kosong"
return@setOnClickListener
}
val intent = Intent(Intent.ACTION_CALL)
intent.data = Uri.parse("tel:" phoneNumber)
startActivity(intent)
}
// memanggil fungsi user permission
setupPermissions()
// menambahkan fungsi untuk tombol fragment
btnFragment.setOnClickListener{
val intent = Intent(this, Pratice5ForFragmentActivity::class.java)
startActivity(intent)
}
}
// menampilkan uer permission
val CALL_REQUEST_CODE = 100
@SuppressLint("MissingPermission")
private fun setupPermissions() {
val permission = ContextCompat.checkSelfPermission(this,
Manifest.permission.CALL_PHONE)
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.CALL_PHONE),
CALL_REQUEST_CODE)
}
}
}
i have an error
kotlin.UninitializedPropertyAccessException: lateinit property btnProdi has not been initialized
But in my MainActivity.kt class I have initialized the btnProdi variable, is my variable declaration wrong?
CodePudding user response:
As in the error, the btnProdi was not initialized. To resolve the issue, first, make sure that the components in Your layout file for the MainActivity have their own id.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
...
tools:context=".features.main.MainActivity">
<Button
android:id="@ id/btnProdi"
... />
</androidx.constraintlayout.widget.ConstraintLayout>
Having an id assigned to the Button in the xml file will enable us to reference the it in the kotlin code and, finally, initialize the btnProdi.
MainActivity.kt
class MainActivity : AppCompatActivity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// NOTICE THIS LINE
btnProdi == findViewById(R.id.btnProdi)
btnProdi.setOnClickListener {
...
}
}
}
In the above code You will use findViewById which will return the View object identified by the id specified before. In Your case it will be a Button object. From now on the btnProdi will be initialized and ready to use.
Important
In Your code there are even more buttons that lack initialization. I'm talking about btnCallCamera, btnCallBrowser etc. You should apply the same workflow as with the btnProdi to make sure that those buttons will work too.
