安卓Intent.getStringExtra()方法返回null。

49

这是将字符串添加到Extras的方法:

Intent i = new Intent();
i.putExtra("Name", edt_name.getText());
i.putExtra("Description", edt_desc.getText());
i.putExtra("Priority", skb_prior.getProgress());
setResult(RESULT_OK, i);
finish();

这是我在onActivityResult()函数中尝试提取它们的方法:

String name = data.getStringExtra("Name");
String desc = data.getStringExtra("Description");
int prior   = data.getIntExtra("Priority", 50);

但是在第二个代码块后,namedesc都是null,尽管prior有它正确的值。 此外,在调试器中,我可以看到data.mExtras.mMap包含所需的字符串,但只有在第一次请求后才会出现。


你确定 prior 变量的值是正确的,而不是默认值(50)吗? - Piotr Chojnacki
是的,但问题在于edt_name.getText(),它返回的不是String,而是某个继承类,可能是吗? - hotkey
1个回答

104

当您插入您的Extras时,请尝试添加.toString()

i.putExtra("Name", edt_name.getText().toString());

你看到那里的值是 CharSequence,但你需要将其转换为 String 才能调用 getStringExtra()。显然,对于 Strings 只需执行此操作。你可以看到你的 int 的正确值,因为它已经被正确地处理了。


1
谢谢,它可以工作,以及 "" + edt_name.getText(),虽然看起来不太好 :) - hotkey
2
它能够工作是因为""是一个字符串字面量,你正在将其添加到其中。它的工作方式与"" + 2相同,结果为"2"。无论添加到字面量中的内容是什么,都会通过它们自己类的toString函数转换为字符串。 - Michael Celey
@codeMagic,为什么你说它是一个“object”?它不是“CharSequence”吗? - Pacerier
@Pacerier 是的,它实际上会返回一个 CharSequence - codeMagic
@codeMagic 在我的情况下,问题并不是这个,因为我尝试使用相同的接收器来处理不同的闹钟,但是这个问题被触发了,不知道为什么?但最终我还是一个一个地添加它们,这样做可以解决问题,但是这种新方法中意图的目的现在已经消失了。 - Naga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接