Intent.putExtra - 如何将一个字符串发送到下一个活动?

3

好的,我将从用户输入的一些数据创建一个简单的字符串。现在我想将这些数据作为字符串(类似CSV的字符串)传递到下一个活动中。我已经看到一个例子是这样的:

intent.putExtra(EXTRA_MESSAGE, string_to_be_sent)

但是这会抛出一个错误,说EXTRA_MESSAGE不是一个值 - 即它没有被意图识别。我认为这个例子已经过时了。我应该使用什么来发送字符串?我查看了文档并找到了以下内容:

public Intent putExtra (String name, String value)

但是我的值应该取什么名字?我可以自由选择吗,还是必须使用包名?谢谢你的帮助 :)

2
你真的需要做一些基础编程教程。EXTRA_MESSAGE是一个变量,你没有在任何地方定义过。按照惯例,使用大写字母和下划线的用户应该将其视为常量,因此我希望看到类似于final string EXTRA_MESSAGE = "Name of string extra";的东西。这是“复制粘贴编程”不成功的策略的一个很好的例子。学习没有已知的捷径。在提出基本问题之前,你还应该养成阅读文档的习惯。阅读putExtra的文档将告诉你所需的一切。 - Simon
EXTRA_MESSAGE 只是一个唯一的字符串标签,您应该使用它从第二个活动中检索数据。 - Shayan Pourvatan
http://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String, java.lang.String)你说的“曾经是一个常量值”是什么意思?它可以是常量,也可以不是,但不是常量就没有意义。 - Simon
我的意思是,它曾经是一个方法识别的值,当作为参数传递,而不是我编造的值。看看这个链接,它在这里被使用:http://developer.android.com/training/basics/firstapp/starting-activity.html - Swedish Architect
2
从那个页面开始,为了让下一个活动查询额外的数据,您应该使用公共常量定义意图的额外键。因此,请将EXTRA_MESSAGE定义添加到MainActivity类的顶部:public class MainActivity extends Activity { public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"; ... }如果您阅读文档,它非常清楚地说明它是您想要用作额外密钥的任何值。我重复一遍。这一切都有明确的文件记录。 - Simon
显示剩余6条评论
6个回答

8

第一个活动

Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("Variable Name",string_to_be_sent);
startActivity(intent);

第二个活动

//Receiving data inside onCreate() method of Second Activity
String value = getIntent().getStringExtra("Variable Name");

是的,这个方法可行,其他人的答案也同样适用于未来的读者。谢谢! - Swedish Architect

2
Intent intent= new Intent(currentActivity.this, TheActivityYouWant to Start.class);
intent.putExtra("SOME_KEY", "Sending");
startActivity(intent);

在其他活动中检索它,可以在已启动的onCreate(Bundle savedInstanceState)活动中执行以下操作。
Bundle bundle = getIntent().getExtras();
if(bundle != null) {
String your_extra = bundle.getString("SOME_KEY");
}

1
intent.putExtra("anyNameYouWant", "desired string value");

是的,这个可以工作。我不小心漏掉了结尾的“Extra”...哎呀,这就是我得到第二个错误的原因。谢谢!! - Swedish Architect
@SwedishArchitect 如果这个答案对您有帮助,您可以接受它,谢谢。 :-) - user3110424
这个回答对我很有帮助,直接解决了我的问题。但是我认为上面的回答对未来的用户更有帮助。通常我会查看被采纳的答案以获取其他人的问题的帮助,所以我认为这会引导人们找到正确的答案 :) - Swedish Architect
我永远不会原谅T.T - Ogen

1
String product = "hellow"; 
    Intent myintent = new Intent(getApplicationContext(),view1.class);
    myintent.putExtra("product", product);

你还需要添加代码来检索你的数据。String product = myintent.getStringExtra("product"); - raman rayat

1
在发送活动中:
 String EXTRA_MESSAGE = "Your string to be sent.."

    intent.putExtra(EXTRA_MESSAGE, EXTRA_MESSAGE ); 
    startActivity(intent);

然后在接收活动的onCreate方法中:
    Bundle bundle= getIntent().getExtras();
    String stringtoBeReceived = bundle.getString(EXTRA_MESSAGE);

0

EXTRA_MESSAGE 显然是一个 static final String 值。

其他人已经回答了如何使用它,我想补充一下,创建一个 Utils 类将有助于您更灵活地维护代码。例如,您可以创建一个 Utils 类来保存所有常量值。

final class Utils {
  private Utils(){}//avoid useless instantiation of the class
  private final static String EXTRA_MESSAGE = "extraMessage";
}

现在,如果您想更改此字符串的值,您只需更改此字符串而不必浏览所有类/活动并搜索您使用了此字符串值的位置。
而且,您只需要执行以下操作:
myintent.putExtra(Utils.EXTRA_MESSAGE, "theMessage");
String extra = bundle.getString(Utils.EXTRA_MESSAGE);

现在,如果您想更改EXTRA_MESSAGE的值,您只需在Utils类中进行修改即可。

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