我正在尝试从我创建的Intent中提取一个int,但是第二个引发了一个错误“无法将java.lang.String转换为int”,而第一个则没有。为什么会这样?
由于
答案 0 :(得分:1)
获取您需要使用的int
值
getIntent().getIntExtra("x", 0)
或
getIntent().getExtras().getInt("x")
答案 1 :(得分:1)
第一个是:
(Integer)getIntent().getExtras().get(x)
这会根据密钥Object
检索x
并尝试将其转换为Integer
。如果get()
返回其他内容,则会在运行时使用ClassCastException
崩溃。
第二个是:
(Integer)getIntent().getStringExtra(x)
这会根据密钥String
检索x
,并尝试将其转换为Integer
。 Object
可能是Integer
,这就是第一个编译但可能在运行时失败的原因。 String
不可能是Integer
。因此,这在编译时失败。
正如奥列格先生指出的那样,正确的答案是在getIntExtra()
上的Intent
或getInt()
上Bundle
拨打getExtras()
。< / p>
答案 2 :(得分:0)
关于铸造的全部内容
getIntent()。getExtras()。get(x)返回一个Object类型
而(Integer)getIntent()。getStringExtra(x)返回一个String类型的对象。
如果你回想起(或者只是学习),每个Java Class
都会默认扩展Object,而它会获得toString()
之类的内容。
这就是为什么你可以尝试将Object转换为ANY类的原因。尝试 - 但如果失败了,你只会在运行时知道它。
另一方面,String
是一个已扩展Object
的类,与Integer
及其自身的值和属性无关。
因此,当您尝试从String
投射到Integer
时,您会收到错误。
最佳解决方案已经发布 我只是补充说你仍然可以这样做:
getInteger(getIntent().getStringExtra(x));