我有个问题。我有 2 activities
,主屏幕和第二个屏幕。我希望第二个屏幕将数据发送到主屏幕,但是当我启动应用程序时它告诉我它已停止并关闭。当我以相反的方式(从主页到第二个屏幕)进行操作时,它可以正常工作。
有谁知道为什么错误?要传递我正在使用的数据Bundle
,它是正确的方法还是有更好的方法?
主屏幕:
public class MainActivity extends AppCompatActivity {
TextView tv2;
Button b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv2=(TextView)findViewById(R.id.tv2);
b2=(Button)findViewById(R.id.b2);
Bundle parametros = this.getIntent().getExtras();
String datos = parametros.getString("datos");
tv2.setText(datos);
}
public void segunda_pantalla(View view){
Intent i=new Intent(this, segunda_pantalla.class);
startActivity(i);
}
第二屏:
public class pantalla2 extends AppCompatActivity {
Button b1;
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pantalla2);
b1=(Button)findViewById(R.id.b1);
tv1=(TextView)findViewById(R.id.tv1);
}
public void b1(View view){
tv1.setText("1");
String datos = tv1.getText().toString();
Bundle parmetros = new Bundle();
parmetros.putString("datos", datos);
Intent i = new Intent(this, MainActivity.class);
i.putExtras(parmetros);
startActivity(i);
}
如何在活动之间发送数据。
发送数据,一般是通过 a 来完成
Bundle
,其中可以添加值,即bundle
通过 a 发送Intent
。您可以通过指定名称来指定任何类型的元素或元素数组的传递:通过getExtras()或者具体方法获取接收到的数据类型在接收
Activity
端Bundle
获取值。如果没有找到值,则返回 null。或者简单地说:
###* 重要:重要的是要提到
Activity
目的地中信息的接收必须始终在方法内完成onCreate()
。出现您的问题是因为当您启动它时
MainActivity
尝试接收具有 value 的捆绑包null
,您可以在 LogCat 中对其进行验证。执行以下验证:
考虑到在您不确保收到 a 的活动中
Bundle
,您必须执行此验证。同样重要的是要评论返回到第
Activity
一个您不需要通过 a 来完成Intent
,只需使用finish()
关闭它。为了在活动之间发送数据,使用了Bundle类。
该方法可用于
putExtra()
附加整数、浮点值、字节、字符和官方 Android 开发人员文档中列出的一些其他数据类型。要从接收方检索这些值,Intent
使用Activity
Service 或Broadcast Receiver
方法getExtra()
。同样,我们可以将任意数量的键值对存储在一个 Bundle 对象中,并简单地将这个对象通过
Intent
:其他可以发货的类型:
网站上其他对您有很大帮助的类似问题:
将数据从片段传递到另一个活动中的片段
帮助android studio各种活动,获取数据
这不是接收数据的正确方法,有一个方法叫做
startActivityForResult()
:并从第二个活动返回数据:
并且应用程序停止,因为当您第一次运行应用程序时,它正在请求其中的数据
onCreate()
但没有这样的数据:这是StartActivity() 和 StartActivityForResult() 的一些官方文档
注意该功能
finish()
应该几乎是强制使用的,否则当您进入第二个活动并返回第一个活动时,您将在活动之间循环,可以测试当您按下返回按钮时它会返回到第二个活动,然后到第一个,最后它将退出应用程序。奇怪的事实:如果您查看活动生命周期,您会注意到当执行第二个活动时,当前活动被放入,
onPause()
因此当您返回主活动时,将执行方法onResume()
而不是onCreate()
. (只是一些优化代码的技巧)在第一个活动中,您必须检查您的变量
paremetros
是否不为空尝试这样的事情
我会做如下活动2
在 MainActivity 我收到它
准备好你拥有它们
从 Window2 接收
发送到 vebtana1 的 window2
你得到它是这样的: