如何将 putExtra() 和 getExtra() 用于字符串数据
Posted
技术标签:
【中文标题】如何将 putExtra() 和 getExtra() 用于字符串数据【英文标题】:How to use putExtra() and getExtra() for string data 【发布时间】:2011-07-13 01:29:24 【问题描述】:谁能告诉我究竟如何使用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);确保在 put 和 get 中使用相同的键。 【参考方案1】:使用它来“放置”文件...
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");
【讨论】:
是用来处理方向变化的“savedInstanceState...”和“...getSerialable”代码吗?如果不是,那代码是做什么用的? 我使用的是android 3.0.1,我必须使用this.getActivity().getIntent().getExtras()
。
如果使用PendingIntents,则需要使用“PendingIntent.FLAG_UPDATE_CURRENT”标志:***.com/a/29846408/2738240Intent intent = new Intent(context, MainActivity.class); intent.putExtra("button_id", 1); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews 视图 = new RemoteViews(context.getPackageName(), R.layout.my_test_widget); views.setOnClickPendingIntent(R.id.my_test_widget_button_1, pendingIntent);【参考方案2】:
第一个 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);
);
第二屏.java
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);
【讨论】:
【参考方案3】:最佳方法...
发送活动
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");
//这需要api 12。
//第二个参数是可选的。如果 keyName 为 null,则使用 defaultkey
作为数据。
【讨论】:
【参考方案4】:这是我一直在使用的,希望它对某人有所帮助.. 简单而有效。
发送数据
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");
干杯!
【讨论】:
我仍然需要不时提醒自己,这是如何正确完成的……哈哈!【参考方案5】:在Android中实现intent
很容易。它需要你从一个活动转移到另一个活动,我们有两个方法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】: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");
【讨论】:
【参考方案7】:一个小附录:您不必为密钥创建自己的名称,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);
【讨论】:
【参考方案8】:更简单
发送方
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");
【讨论】:
我将永远支持简单,尤其是在代码做同样事情的地方。【参考方案9】:在Intent 类中更新。
使用hasExtra()
检查intent 是否有key 数据。
您现在可以直接使用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 因为PutExtraConstants
类只包含常量(public
、static
、final
)。所以Constants最好使用接口。【参考方案10】:
发送
startActivity(new Intent(First.this, Secend.class).putExtra("key",edit.getText.tostring));
得到
String myData = getIntent.getStringExtra("key");
【讨论】:
【参考方案11】:将字符串放入 Intent 对象中
Intent intent = new Intent(FirstActivity.this,NextAcitivity.class);
intent.putExtra("key",your_String);
StartActivity(intent);
onCreate方法中的NextAcitvity获取字符串
String my_string=getIntent().getStringExtra("key");
这是一种简单而简短的方法
【讨论】:
【参考方案12】:在 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!请编辑您的答案并详细说明为什么以及如何解决问题。如需更多指导,请参阅***.com/help/how-to-answer【参考方案13】:放函数
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();
【讨论】:
【参考方案14】:推送数据
import android.content.Intent;
...
Intent intent =
new Intent(
this,
MyActivity.class );
intent.putExtra( "paramName", "paramValue" );
startActivity( intent );
上面的代码可能在主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 传递一个字符串怎么办?【参考方案15】:简单, 在第一个活动中-
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);
);
在第二个Activity-
@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 条件。
【讨论】:
【参考方案16】:先放字符串
Intent secondIntent = new Intent(this, typeof(SecondActivity));
secondIntent.PutExtra("message", "Greetings from MainActivity");
在那之后检索它
var message = this.Intent.GetStringExtra("message");
就是这样;)
【讨论】:
【参考方案17】:单个内联代码就足以完成此任务。这对我来说毫不费力。
对于#android 开发者。
String strValue=Objects.requireNonNull(getIntent().getExtras()).getString("string_Key");
【讨论】:
【参考方案18】:您可以简单地使用静态变量来存储编辑文本的字符串,然后在其他类中使用该变量。希望这能解决你的问题
【讨论】:
你可以但你不应该:-)以上是关于如何将 putExtra() 和 getExtra() 用于字符串数据的主要内容,如果未能解决你的问题,请参考以下文章
通过 GetExtras(或)共享首选项获取字符串到 AppWidget
通过 GetExtras(或)共享首选项获取字符串到 AppWidget