apk(安卓工作室)安装失败



我想在我的android设备上运行一个应用程序,当我通过android studio运行它时,突然无法打开应用程序(即使可以安装应用程序(。有人能帮我解决这个问题吗?

================================主要活动.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)
}
}
}

我的有个错误

kotlin.UninitializedPropertyAccessException: lateinit property btnProdi has not been initialized

但是在我的MainActivity.kt类中,我已经初始化了btnPodi变量,我的变量声明错了吗?

在错误中,btnProdi未初始化。要解决此问题,首先,确保MainActivity布局文件中的组件具有自己的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>

在xml文件中将id分配给Button将使我们能够在kotlin代码中引用它,并最终初始化btnProdi

主活动.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 {
...
}
}
}

在上面的代码中,您将使用findViewById,它将返回由之前指定的id标识的View对象。在您的情况下,它将是一个Button对象。从现在起,btnProdi将被初始化并准备使用。

重要

在您的代码中,甚至还有更多的按钮没有初始化。我说的是btnCallCamerabtnCallBrowser等。您应该应用与btnProdi相同的工作流程,以确保这些按钮也能工作。

最新更新