如何对字符串数据使用putExtra()和getExtra()


318

有人可以告诉我确切地使用getExtra()putExtra()意图吗?实际上,我有一个字符串变量,例如str,它存储了一些字符串数据。现在,我想将此数据从一个活动发送到另一个活动。

  Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
  String keyIdentifer  = null;
  i.putExtra(strName, keyIdentifer );

然后在SecondScreen.java中

 public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.table);
        TextView userName = (TextView)findViewById(R.id.userName);
        Bundle bundle = getIntent().getExtras();

        if(bundle.getString("strName")!= null)
        {
            //TODO here get the string stored in the string variable and do 
            // setText() on userName 
        }

    }

我知道这是一个非常基本的问题,但不幸的是我被困在这里。请帮忙。

谢谢,

编辑:在这里,我尝试从一个屏幕传递到另一个屏幕的字符串是动态的。那就是我有一个editText,无论用户键入什么,我都会在其中获取字符串。然后在的帮助下myEditText.getText().toString()。我将输入的值作为字符串获取,然后必须传递此数据。


i.putExtra(strName,keyIdentifer); 该语句具有strName变量,而bundle.getString(“ strName”)具有“ strName”字符串。它的intent.putExtra(key,value)和intent.getExtras()。getString(key); 确保您使用的是相同的密钥。
Seema 2015年

Answers:


416

使用它来“放置”文件...

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra("STRING_I_NEED", strName);

然后,要检索该值,请尝试如下操作:

String newString;
if (savedInstanceState == null) {
    Bundle extras = getIntent().getExtras();
    if(extras == null) {
        newString= null;
    } else {
        newString= extras.getString("STRING_I_NEED");
    }
} else {
    newString= (String) savedInstanceState.getSerializable("STRING_I_NEED");
}

10
“ savedInstanceState ...”和“ ... getSerialiable”代码用于处理方向更改吗?如果没有,该代码用于什么?
AJW

我正在使用android 3.0.1,我不得不使用this.getActivity().getIntent().getExtras()
泰勒

如果使用PendingIntents,则需要使用“ PendingIntent.FLAG_UPDATE_CURRENT”标志:stackoverflow.com/a/29846408/2738240 Intent intent = new Intent(context,MainActivity.class); intent.putExtra(“ button_id”,1); PendingIntentendingIntent = PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews视图=新的RemoteViews(context.getPackageName(),R.layout.my_test_widget); views.setOnClickPendingIntent(R.id.my_test_widget_button_1,endingIntent);
Matthias Luh

69

第一个Screen.java

text=(TextView)findViewById(R.id.tv1);
edit=(EditText)findViewById(R.id.edit);
button=(Button)findViewById(R.id.bt1);

button.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0) {
        String s=edit.getText().toString();

        Intent ii=new Intent(MainActivity.this, newclass.class);
        ii.putExtra("name", s);
        startActivity(ii);
    }
});

第二屏

public class newclass extends Activity
{
    private TextView Textv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.intent);
        Textv = (TextView)findViewById(R.id.tv2);
        Intent iin= getIntent();
        Bundle b = iin.getExtras();

        if(b!=null)
        {
            String j =(String) b.get("name");
            Textv.setText(j);
        }
    }
}

52

最佳方法...

发送活动

Intent intent = new Intent(SendingActivity.this, RecievingActivity.class);
intent.putExtra("keyName", value);  // pass your values and retrieve them in the other Activity using keyName
startActivity(intent);

接收活动

 Bundle extras = intent.getExtras();
    if(extras != null)
    String data = extras.getString("keyName"); // retrieve the data using keyName 

///接收数据的最短方法。

String data = getIntent().getExtras().getString("keyName","defaultKey");

//这需要api12。//第二个参数是optional。如果keyName为null,则使用defaultkey作为数据。


18

这就是我一直在使用的方法,希望它可以帮助某人..简单而有效。

发送数据

    intent = new Intent(getActivity(), CheckinActivity.class);
    intent.putExtra("mealID", meal.Meald);
    startActivity(intent);

获取数据

    int mealId;

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();

    if(bundle != null){
        mealId = bundle.getInt("mealID");
    }

干杯!


1
我仍然不得不时不时地提醒自己,这是如何正确完成的。
SindriÞór15年

10

这很容易intent在Android中实现。.它需要您将一个活动转移到另一个活动,我们必须使用两种方法putExtra();getExtra();现在我向您展示示例。

    Intent intent = new Intent(activity_registration.this, activity_Login.class);
                intent.putExtra("AnyKeyName", Email.getText().toString());  // pass your values and retrieve them in the other Activity using AnyKeyName
                        startActivity(intent);

现在我们必须从AnyKeyName参数中获取值,下面提到的代码将有助于实现这一点

       String data = getIntent().getExtras().getString("AnyKeyName");
        textview.setText(data);

我们可以Intent在任何需要的地方轻松设置接收值。


6

一个小附录:您不必为密钥创建自己的名称,android提供了这些名称,例如f.ex。Intent.EXTRA_TEXT。修改接受的答案:

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra(Intent.EXTRA_TEXT, strName);

然后,要检索该值,请尝试如下操作:

String newString;
Bundle extras = getIntent().getExtras();
if(extras == null) {
    newString= null;
} else {
    newString= extras.getString(Intent.EXTRA_TEXT);
}

4
Intent intent = new Intent(view.getContext(), ApplicationActivity.class);
                        intent.putExtra("int", intValue);
                        intent.putExtra("Serializable", object);
                        intent.putExtra("String", stringValue);
                        intent.putExtra("parcelable", parObject);
                        startActivity(intent);

应用活动

Intent intent = getIntent();
Bundle bundle = intent.getExtras();

if(bundle != null){
   int mealId = bundle.getInt("int");
   Object object = bundle.getSerializable("Serializable");
   String string = bundle.getString("String");
   T string = <T>bundle.getString("parcelable");
}

4

Intent类中更新。

  • 使用hasExtra()检查,如果有意向的关键数据。
  • 您现在可以getStringExtra()直接使用。

传递数据

intent.putExtra(PutExtraConstants.USER_NAME, "user");

获取数据

String userName;
if (getIntent().hasExtra(PutExtraConstants.USER_NAME)) {
    userName = getIntent().getStringExtra(PutExtraConstants.USER_NAME);
}

始终将键放在常量中作为最佳实践。

public interface PutExtraConstants {
    String USER_NAME = "USER_NAME";
}

为什么是PutExtraConstants界面?
Big_Chair

@Big_Chair因为PutExtraConstants类中只包含常量(publicstaticfinal)。因此,最好将接口用于常量。
Khemraj

3

更简单

发送方

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
i.putExtra("id","string data");
startActivity(i)

接收方

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
String strData = i.getStringExtra("id");

3

将字符串放入意图对象

  Intent intent = new Intent(FirstActivity.this,NextAcitivity.class);
  intent.putExtra("key",your_String);
  StartActivity(intent);

onCreate方法中的NextAcitvity获取字符串

String my_string=getIntent().getStringExtra("key");

这是简单快捷的方法


2

发送

startActivity(new Intent(First.this, Secend.class).putExtra("key",edit.getText.tostring));

得到

String myData = getIntent.getStringExtra("key");

1

放置功能

etname=(EditText)findViewById(R.id.Name);
        tvname=(TextView)findViewById(R.id.tvName);

        b1= (ImageButton) findViewById(R.id.Submit);

        b1.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                String s=etname.getText().toString();

                Intent ii=new Intent(getApplicationContext(), MainActivity2.class);
                ii.putExtra("name", s);
                Toast.makeText(getApplicationContext(),"Page 222", Toast.LENGTH_LONG).show();
                startActivity(ii);
            }
        });



getfunction 

public class MainActivity2 extends Activity {
    TextView tvname;
    EditText etname;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);
        tvname = (TextView)findViewById(R.id.tvName);
        etname=(EditText)findViewById(R.id.Name);
        Intent iin= getIntent();
        Bundle b = iin.getExtras();

        if(b!=null)
        {

          String j2 =(String) b.get("name");

etname.setText(j2);
            Toast.makeText(getApplicationContext(),"ok",Toast.LENGTH_LONG).show();
        }
    }

1

推送数据

import android.content.Intent;

    ...

    Intent intent = 
        new Intent( 
            this, 
            MyActivity.class );
    intent.putExtra( "paramName", "paramValue" );
    startActivity( intent );

上面的代码可能在main内部activity。“ MyActivity.class”是Activity我们要启动的第二个;它必须明确包含在AndroidManifest.xml文件中。

<activity android:name=".MyActivity" />

拉取数据

import android.os.Bundle;

    ...

    Bundle extras = getIntent().getExtras();
    if (extras != null)
    {
        String myParam = extras.getString("paramName");
    }
    else
    {
        //..oops!
    }

在此示例中,以上代码将在您的MyActivity.java文件内。

陷阱

此方法只能通过strings。因此,假设您需要将传递ArrayList给自己ListActivity;一种可行的解决方法是传递一个逗号分隔的字符串,然后在另一侧将其拆分。

替代解决方案

采用 SharedPreferences


如果我想从string.xml传递字符串怎么办?
HB。

1

简单,在第一个活动中-

    EditText name= (EditText) findViewById(R.id.editTextName);
    Button button= (Button) findViewById(R.id.buttonGo);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this,Main2Activity.class);
            i.putExtra("name",name.getText().toString());
           startActivity(i);
          }
    });

在第二项活动中

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    TextView t = (TextView) findViewById(R.id.textView);
    Bundle bundle=getIntent().getExtras();
    String s=bundle.getString("name");
    t.setText(s);
}

您可以根据需要添加if / else条件。


1

在FirstScreen.java

    Intent intent = new Intent(FirstScreen.this, SecondScreen.class);
    String keyIdentifier = null;
    intent.putExtra(strName, keyIdentifier);

在SecondScreen.java

    String keyIdentifier;
    if (savedInstanceState != null)
        keyIdentifier= (String) savedInstanceState.getSerializable(strName);
    else
        keyIdentifier = getIntent().getExtras().getString(strName);

欢迎来到SO!请编辑您的答案,并详细说明其原因和解决方法。有关更多指导,请参阅stackoverflow.com/help/how-to-answer
B--rian

0

将字符串放在首位

Intent secondIntent = new Intent(this, typeof(SecondActivity));
            secondIntent.PutExtra("message", "Greetings from MainActivity");

之后取回它

var message = this.Intent.GetStringExtra("message");

就这样 ;)


-1

您可以简单地使用静态变量来存储您的edittext的字符串,然后在另一个类中使用该变量。希望这能解决您的问题


可以,但您不可以:-)
Blundell
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.