如何从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轻松地在整个应用程序中传递数据,所以希望在应用程序开发过程中对您和其他人有所帮助。