我使用代码A打开一个活动,并将一个长值传递给参数id。
我使用代码B来获取参数ID的值,但我粗略地误用了代码var myid =intent.extras.getInt("id")
,它应该是var myid =intent.extras.getLong("id")
当我使用var myid =intent.extras.getInt("id")
时,系统会为参数myid返回错误值0,这会导致我一次又一次地调试程序。
我认为系统在使用var myid =intent.extras.getInt("id")
时应显示错误信息,但系统会给出错误值0
代码A
startActivity<UIAddEditBackup>("id" to 2L)
代码B
class UIAddEditBackup: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_add_edit_backup)
var myid =intent.extras.getInt("id")
toast("This is my ID "+myid)
}
}
答案 0 :(得分:1)
intent.extras.getInt("id")
如果没有找到具有相同键的任何整数值,则会返回0作为默认值。
如果您需要自己的默认值,则可以使用intent.extras.getInt("id", yourDefValue)
可能还有一个疑问,问为什么长期不能被转换成整数并返回。对此的简单回答是Intent中的额外内容只是ArrayMap<String, Object>
。因此,每当我们要求getInt(key)
的整数时,它会尝试执行以下操作:
1. Fetch the value using the given key.
2. Is the key exists?
3. No -> return 0 as default value
4. Yes -> Cast the value to `java.lang.Integer` and return the value
5. In case Casting fails, catch the ClassCastException and return default value (which is 0 in your case)