如何从Android上获取额外的数据?

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);


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

1
Intent intent = getIntent();

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

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);

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

第二页扩展片段:

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.putExtra("key", Value);,在接收意图的另一个活动期间,我们将使用intent.getStringExtra("key");将意图数据作为String或使用其他可用方法获取其他类型的数据(Integer,< x9>等)。
键可以是任何用于标识值的关键字,表示您正在共享的值。
希望它能为你效劳。


从意图中获取不同类型的额外

要从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框架。查看该答案中的示例,了解如何在活动之间轻松传递数据。

它还演示了VaporIntent,它允许您链接方法调用并使用重载的.put(...)方法:

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

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