gpt4 book ai didi

android - 如何使用 android studio 在 kotlin 代码中添加 try/catch?

转载 作者:行者123 更新时间:2023-12-02 13:36:02 34 4
gpt4 key购买 nike

在使用 android studio 时,我必须在我的 kotlin 代码中添加 try/catch,但不明白如何添加它。下面是我必须添加 try/catch 的代码。

我还没有尝试任何东西,因为我完全不知道在哪里应用 try/catch。

1.

class SmsReceiver : BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent) {

val extras = intent.extras

if(extras != null){

val sms: Array<Any> = extras.getString("pdus") as Array<Any>

for(i in sms.indices){
val format = extras.getString("format")

var smsMessage = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
SmsMessage.createFromPdu(sms[i] as ByteArray,format)
}else{
SmsMessage.createFromPdu(sms[i] as ByteArray)
}

var phoneNumber = smsMessage.originatingAddress
val messageText = smsMessage.messageBody.toString()

Toast.makeText(context,"$phoneNumber:(Private)\n" + "messageText: $messageText",Toast.LENGTH_SHORT).show()
}
}
}

}

2.
class MainActivity :AppCompatActivity(){

private val requestReceiveSms: Int = 3

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(ActivityCompat.checkSelfPermission(this,android.Manifest.permission.RECEIVE_SMS) !=
PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.RECEIVE_SMS),
requestReceiveSms)
}

}
}

我预计“SMS 收到 Toast 消息”,但我收到“不幸的是,应用程序已停止”并崩溃..

最佳答案

try {
if(extras != null){

val sms: Array<Any> = extras.getString("pdus") as Array<Any>

for(i in sms.indices){
val format = extras.getString("format")

var smsMessage = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
SmsMessage.createFromPdu(sms[i] as ByteArray,format)
}else{
SmsMessage.createFromPdu(sms[i] as ByteArray)
}

var phoneNumber = smsMessage.originatingAddress
val messageText = smsMessage.messageBody.toString()

Toast.makeText(context,"$phoneNumber:(Private)\n" + "messageText: $messageText",Toast.LENGTH_SHORT).show()
}
}
}catch (ex:Exception){
//your error handling code here
//here, consider adding Log.e("SmsReceiver", ex.localizedMessage)
//this log statement simply prints errors to your android studio terminal and will help with debugging, alternatively leave it out
if (context != null){
Toast.makeText(context!!,ex.localizedMessage, Toast.LENGTH_SHORT).show()
}
}

您应该在可能引发异常的代码上应用 try catch。对于您发布的代码,有几个地方可能会崩溃,例如索引越界( sms[i] )或如果( extras.getString("pdus" )找不到此 key ,因此我的解决方案将这两个都包含在同样的 try catch ,然后您对异常执行的操作取决于您。

如果你想处理更具体的异常,你也可以这样做:
try {
if(extras != null){

val sms: Array<Any> = extras.getString("pdus") as Array<Any>

for(i in sms.indices){
val format = extras.getString("format")

var smsMessage = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
SmsMessage.createFromPdu(sms[i] as ByteArray,format)
}else{
SmsMessage.createFromPdu(sms[i] as ByteArray)
}

var phoneNumber = smsMessage.originatingAddress
val messageText = smsMessage.messageBody.toString()

Toast.makeText(context,"$phoneNumber:(Private)\n" + "messageText: $messageText",Toast.LENGTH_SHORT).show()
}
}
}catch (indexOutOfBoundsException:IndexOutOfBoundsException){
//your error handling code here
} catch (nullpointer : NullPointerException){
//your error handling code here
}

关于android - 如何使用 android studio 在 kotlin 代码中添加 try/catch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57072354/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com