How do I get extra data from intent on Android?
如何将数据从一个活动(意图)发送到另一个活动?
我用这段代码发送数据:
1 2 3 4 | Intent i=new Intent(context,SendMessage.class); i.putExtra("id", user.getUserAccountId()+""); i.putExtra("name", user.getUserFullName()); context.startActivity(i); |
首先,使用
1 | Intent intent = getIntent(); |
如果您的额外数据表示为字符串,则可以使用
1 2 | String id = intent.getStringExtra("id"); String name = intent.getStringExtra("name"); |
在接收活动中
1 2 3 4 5 6 7 | Bundle extras = getIntent().getExtras(); String userName; if (extras != null) { userName = extras.getString("name"); // and get whatever type user account id is } |
1 2 3 4 5 6 7 8 9 10 | // 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 i.e. john |
加起来
设置数据
1 2 3 4 | String value ="Hello World!"; Intent intent = new Intent(getApplicationContext(), NewActivity.class); intent.putExtra("sample_name", value); startActivity(intent); |
获取数据
1 2 3 4 5 | String value; Bundle bundle = getIntent().getExtras(); if (bundle != null) { value = bundle.getString("sample_name"); } |
不要初始化另一个新的Intent来接收数据,而是这样做:
1 | String id = getIntent().getStringExtra("id"); |
如果在FragmentActivity中使用,请尝试以下方法:
第一页扩展了FragmentActivity
1 2 3 | Intent Tabdetail = new Intent(getApplicationContext(), ReceivePage.class); Tabdetail.putExtra("Marker", marker.getTitle().toString()); startActivity(Tabdetail); |
在片段中,您只需要先调用
第二页扩展片段:
1 | String receive = getActivity().getIntent().getExtras().getString("name"); |
如果您尝试在片段中获取额外数据,那么您可以尝试使用:
放置数据使用:
1 2 | Bundle args = new Bundle(); args.putInt(DummySectionFragment.ARG_SECTION_NUMBER); |
获取数据使用:
1 2 3 4 5 6 7 8 9 10 | 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); } |
**按意图放置数据 - **
1 2 3 4 | Intent intent = new Intent(mContext, HomeWorkReportActivity.class); intent.putExtra("subjectName","Maths"); intent.putExtra("instituteId",22); mContext.startActivity(intent); |
**按意图获取数据 - **
1 2 | String subName = getIntent().getStringExtra("subjectName"); int insId getIntent().getIntExtra("instituteId",0); |
如果我们通过Intent发送Integer值。当我们必须在getIntent()。getIntExtra("instituteId",0)中使用第二个参数0,否则我们不使用0然后android给我错误。
您可以从intent获取任何类型的额外数据,无论它是对象,字符串还是任何类型的数据。
1 2 3 4 5 6 7 | Bundle extra = getIntent().getExtras(); if (extra != null){ String str1 = (String) extra.get("obj"); // get a object String str2 = extra.getString("string"); //get a string } |
最短的解决方案是:
1 | Boolean isGranted = getIntent().getBooleanExtra("tag", false); |
科特林
第一项活动
1 2 3 | val intent = Intent(this, SecondActivity::class.java) intent.putExtra("key","value") startActivity(intent) |
第二项活动
1 | val value = getIntent().getStringExtra("key") |
建议
始终将密钥放在常量文件中以获得更多托管方式。
1 2 3 | companion object { val PUT_EXTRA_USER ="PUT_EXTRA_USER" } |
只是一个建议:
在你的i.putExtra("id".....)中使用"id"或"name",我建议,当它有意义时,使用可以与putExtra()一起使用的当前标准字段,即Intent.EXTRA_something。
可以在Intent(Android开发者)中找到完整列表。
我们可以通过简单的方式做到:
在FirstActivity中:
1 2 3 4 | Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("uid", uid.toString()); intent.putExtra("pwd", pwd.toString()); startActivity(intent); |
在SecondActivity中:
1 2 3 4 5 6 7 8 9 10 | try { Intent intent = getIntent(); String uid = intent.getStringExtra("uid"); String pwd = intent.getStringExtra("pwd"); } catch (Exception e) { e.printStackTrace(); Log.e("getStringExtra_EX", e +""); } |
在第一个活动上传递意图值:
1 2 3 4 | Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("uid", uid.toString()); intent.putExtra("pwd", pwd.toString()); startActivity(intent); |
接收第二个活动的意图; -
1 2 3 | Intent intent = getIntent(); String user = intent.getStringExtra("uid"); String pass = intent.getStringExtra("pwd"); |
我们通常使用两种方法来发送值并获取值。
为了发送值,我们将使用
键可以是任何用于标识值的关键字,表示您正在共享的值。
希望它能为你效劳。
从意图中获取不同类型的额外
要从Intent访问数据,您应该知道两件事。
- 键
- 数据的DataType。
Intent类中有不同的方法来提取不同类型的数据类型。
看起来像这样
getIntent().XXXX(KEY) or intent.XXX(KEY);
因此,如果您知道在otherActivity中设置的varibale的数据类型,则可以使用相应的方法。
从Intent中检索Activity中的String的示例
1 | String profileName = getIntent().getStringExtra("SomeKey"); |
不同dataType的方法的不同变体的列表
您可以在Intent官方文档中查看可用方法列表。
This is for adapter , for activity you just need to change mContext
to your Activty name and for fragment you need to change mContext to
getActivity()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public static ArrayList<String> tags_array ;// static array list if you want to pass array data public void sendDataBundle(){ tags_array = new ArrayList(); tags_array.add("hashtag");//few array data tags_array.add("selling"); tags_array.add("cityname"); tags_array.add("more"); tags_array.add("mobile"); tags_array.add("android"); tags_array.add("dress"); Intent su = new Intent(mContext, ViewItemActivity.class); Bundle bun1 = new Bundle(); bun1.putString("product_title","My Product Titile"); bun1.putString("product_description","My Product Discription"); bun1.putString("category","Product Category"); bun1.putStringArrayList("hashtag", tags_array);//to pass array list su.putExtras(bun1); mContext.startActivity(su); } |
你也可以这样做
//将值放入意图中
1 2 3 | Intent in = new Intent(MainActivity.this, Booked.class); in.putExtra("filter","Booked"); startActivity(in); |
//从意图中获取价值
1 2 3 | Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String filter = bundle.getString("filter"); |
我刚刚在这里发布了一个答案,更详细地介绍了这个主题,包括一些替代方案。
它利用了Vapor API,这是我为简化Android开发而编写的一个新的jQuery启发的Android框架。查看该答案中的示例,了解如何在活动之间轻松传递数据。
它还演示了
1 | $.Intent().put("data","myData").put("more", 568)... |
您可以使用Vapor API轻松地在整个应用程序中传递数据,因此希望它在应用程序开发期间对您和其他人有所帮助。