为什么我在kotlin中将Long值转换为Int值时无法获取错误信息?

时间:2018-04-01 05:45:52

标签: android kotlin

我使用代码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)
    }
}

1 个答案:

答案 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)