如何从Android的意图获得额外的数据?

我怎样才能从一个活动(intent)发送数据到另一个?

我使用这个代码发送数据:

Intent i=new Intent(context,SendMessage.class); i.putExtra("id", user.getUserAccountId()+""); i.putExtra("name", user.getUserFullName()); context.startActivity(i); 

首先,使用getIntent()方法获取开始活动的意图:

 Intent intent = getIntent(); 

如果您的额外数据表示为string,则可以使用intent.getStringExtra(String name)方法。 在你的情况下:

 String id = intent.getStringExtra("id"); String name = intent.getStringExtra("name"); 

在接收活动中

 Bundle extras = getIntent().getExtras(); String userName; if (extras != null) { userName = extras.getString("name"); // and get whatever type user account id is } 
 // How to send value using intent from one class to another class // class A(which will send data) Intent theIntent = new Intent(this, B.class); theIntent.putExtra("name", john); startActivity(theIntent); // How to get these values in another class // Class B Intent i= getIntent(); i.getStringExtra("name"); // if you log here i than you will get the value of i ie john 

加起来

设置数据

 String value = "Hello World!"; Intent intent = new Intent(getApplicationContext(), NewActivity.class); intent.putExtra("sample_name", value); startActivity(intent); 

获取数据

 String value; Bundle bundle = getIntent().getExtras(); if (bundle != null) { value = bundle.getString("sample_name"); } 

而不是初始化另一个新的意图接收数据,只是这样做:

 String id = getIntent().getStringExtra("id"); 

如果在FragmentActivity中使用,试试这个:

第一页扩展了FragmentActivity

 Intent Tabdetail = new Intent(getApplicationContext(), ReceivePage.class); Tabdetail.putExtra("Marker", marker.getTitle().toString()); startActivity(Tabdetail); 

在片段中,你只需要先调用getActivity()

第二页扩展Fragment

 String receive = getActivity().getIntent().getExtras().getString("name"); 

如果您试图获取碎片中的额外数据,那么您可以尝试使用:

数据使用

 Bundle args = new Bundle(); args.putInt(DummySectionFragment.ARG_SECTION_NUMBER); 

获取数据使用:

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getArguments().getInt(ARG_SECTION_NUMBER); getArguments().getString(ARG_SECTION_STRING); getArguments().getBoolean(ARG_SECTION_BOOL); getArguments().getChar(ARG_SECTION_CHAR); getArguments().getByte(ARG_SECTION_DATA); } 

只是一个build议:

而不是在你的i.putExtra(“id”…..)中使用“id”或“name”,我会build议,当它有意义时,使用当前可以与putExtra()一起使用的标准字段,即Intent.EXTRA_something。

意向 (Android开发人员)可以find完整列表。

我们可以通过简单的方法做到这一点

在FirstActivity中:

 Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("uid", uid.toString()); intent.putExtra("pwd", pwd.toString()); startActivity(intent); 

在SecondActivity中:

  try { Intent intent = getIntent(); String uid = intent.getStringExtra("uid"); String pwd = intent.getStringExtra("pwd"); } catch (Exception e) { e.printStackTrace(); Log.e("getStringExtra_EX", e + ""); } 

你也可以这样做
/ /意图的价值

  Intent in = new Intent(MainActivity.this, Booked.class); in.putExtra("filter", "Booked"); startActivity(in); 

//从意图获取价值

  Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String filter = bundle.getString("filter"); 

从意图获取不同types的额外信息

要从Intent访问数据,您应该知道两件事情。

  • 你的数据的数据types。

Intent类中有不同的方法来提取不同types的数据types。 看起来像这样

getIntent()。XXXX(KEY)或intent.XXX(KEY);

所以如果你知道你在otherActivity中设置的varibale的数据types,你可以使用相应的方法。

从Intent中检索您的活动中的string的示例

 String profileName = getIntent().getStringExtra("SomeKey"); 

不同数据types的方法的不同变体列表

您可以在意向的正式文档中看到可用方法的列表。

我只是在这里发布了一个更详细的答案,包括一些替代scheme。

它利用Vapor API ,我写的一个新的jQuery启发的Android框架来简化Android开发。 查看答案中的示例,了解如何轻松地在活动之间传递数据。

它还演示了VaporIntent ,它可以让你连接方法调用,并利用重载的.put(...)方法:

 $.Intent().put("data", "myData").put("more", 568)... 

您可以使用Vapor API轻松地在整个应用程序中传递数据,所以希望在应用程序开发过程中对您和其他人有所帮助。