Android Kotlin 测试 Intent putExtra Value

Android Kotlin Testing for Intent putExtra Value

android studio 4.1.1 和科特林。我是初学者,正在通过教程学习。

我有一个 activity,我在其中使用 Intent 去另一个 activity。我正在使用 intent.putExtra:

val intent = Intent(this, WeightExercise::class.java)
intent.putExtra("POSITION", positionToString)
startActivity(intent)

在 WeightExercise activity 中,我得到传递的值:

// with line numbers:

80: var myPosition = intent.getStringExtra("POSITION").toString()
81: var position = myPosition.toInt()

这行得通。我在 POSITION.

中得到字符串值

问题:我有另一个 activity 使用 Intent 去 WeightExercise activity。它不是通过意图传递值。发生这种情况时,WeightExercise activity 中的第 81 行(上文)会导致错误:

Caused by: java.lang.NumberFormatException: For input string: "null"
at java.lang.Integer.parseInt(Integer.java:615)
at java.lang.Integer.parseInt(Integer.java:650)
at com.johndcowan.liftit.WeightExercise.onCreate(WeightExercise.kt:81)

我已经尝试了几次 if() 来测试 null 或空值,但没有任何方法可以解决此错误。

if ( intent.getStringExtra("POSITION").toString().isNullOrEmpty() ) {...}
if ( myPosition.isNullOrEmpty() ) {...}
if ( myPosition == null ) {...}

是否有更好的方法来测试意图中的命名字符串 POSITION

感谢任何提示。

您可以利用 Kotlin Null Safety

如果需要,当 extra 为 null 时设置默认值。

var myPosition = intent?.extras?.getStringExtra("POSITION") ?: DEFAULT_VALUE

了解更多关于 ?: Elvis operator

getStringExtra() 的 return 值可以为 null,但您通过使用 toString() 将其转换为可能值为 "null" 的非空字符串结果。因此,当您尝试将其转换为 Int 时,Kotlin 不会强制执行可空性。在使用 return 值时,您应该省略 toString() 并使用空安全调用 (?.)。

val myPosition = intent.getStringExtra("POSITION")
val position = myPosition?.toIntOrNull()
if (position != null) {
    //...
}