如何“(整数)getIntent()。getExtras()。get(x)”不同于“(整数)getIntent()。getStringExtra(x)”?

时间:2016-05-09 21:08:46

标签: java android

我正在尝试从我创建的Intent中提取一个int,但是第二个引发了一个错误“无法将java.lang.String转换为int”,而第一个则没有。为什么会这样?

由于

3 个答案:

答案 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,并尝试将其转换为IntegerObject可能是Integer,这就是第一个编译但可能在运行时失败的原因。 String不可能是Integer。因此,这在编译时失败。

正如奥列格先生指出的那样,正确的答案是在getIntExtra()上的IntentgetInt()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));