在onPause中的活动之间传递数据

时间:2016-04-01 19:02:18

标签: java android

我在活动的onpause()方法中传递数据时遇到麻烦。当用户点击一个活动中的按钮时,第二个活动开始。在第一个活动的onPasue方法中我想传递一些数据到其他activity.i使用intent.putExtra()来保存onpause()中的数据。在第二个活动中我使用bundle.getString()来检索data.below是我的代码

 public class FirstActivity extends Activity {

Intent intent;
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tola_calculation);
    b = (Button) findViewById(R.id.button);
    intent = new Intent(Tola_calculation.this, Kaat_calculation.class);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            startActivity(intent);

        }
    });
}

@Override
public void onPause() {
    super.onPause();
    intent.putExtra("key", "i am value");
}}

public class secondActivity extends Activity {
 int value;
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_kaat_calculation);
    Bundle extras=new Bundle();
    Intent intent=getIntent();
    extras=intent.getExtras();
    if (extras!=null) {
        String value = extras.getString("key");
        Toast.makeText(Kaat_calculation.this,value,Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(Kaat_calculation.this,"null problem",Toast.LENGTH_SHORT).show();
    }


}}

问题出现在第二个活动intent.getExtras()第一次返回null。按下后退按钮第一个活动恢复。然后我再次点击转到第二个活动。这次检索数据并且intent.getextras()没有返回null.can有人解释这个奇怪的行为。或者我正在做一些奇怪的事情,因为我是android编程的新手。我希望我能够清楚地解释问题

4 个答案:

答案 0 :(得分:0)

这是因为您的第二个Activity是在第一个Activity来电onPause()之前创建的

解决方案:将您的额外内容放入onClick()回调中。换句话说(正如其他答案所示),您需要在使用Intent致电startActivity()之前将数据附加到Intent

  

在第一个Activity的{​​{1}}方法中,我想传递一些数据   其他onPause()

完全没有必要这样做是因为您的第一个Activity保证在您的第二个Activity变为可见时立即致电onPause()。因此,您现在已经知道您的第一个Activity已拨打Activity

有关详细信息,请参阅活动生命周期的official docs

答案 1 :(得分:0)

在开始新活动之前,您应该向Intent添加数据。所以这一行

intent.putExtra("key", "i am value");

应该先行

startActivity(intent);

总而言之,正确的代码

public class FirstActivity extends Activity {

Intent intent;
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tola_calculation);
    b = (Button) findViewById(R.id.button);
    intent = new Intent(Tola_calculation.this, Kaat_calculation.class);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            intent.putExtra("key", "i am value");
            startActivity(intent);

        }
    });
}

@Override
public void onPause() {
    super.onPause();
}
}

答案 2 :(得分:0)

第一次没有工作,因为当您致电startActivity时,额外费用尚未设置。活动#2在调用onPause之前开始。

这是第二次工作,因为您将意图变量设为实例变量,并且在finish()调用后您没有调用startActivity()。这使您的第一个活动实例保持活力。第二次启动活动#2时,意图实例已经存在,并且已经有了额外的内容。

解决方案:在调用startActivity()之前,您应该加权,并且它会正常工作。

关于这一切如何在Android Docs page

上运作,有一个很好的7步解释

答案 3 :(得分:0)

onPause方法并不意味着您的Activity正在完成,只是它正在暂停。例如,如果用户按下后退按钮,它将暂停,但不会完成活动。更好地查看活动生命周期文档

并且还会看到此http://developer.android.com/reference/android/app/Activity.html#finish%28%29