将数据从第二个活动传递到第一个活动

时间:2016-09-08 00:06:22

标签: android

我正在尝试将Bundle从第二个活动传递到第一个(启动)活动。为了不在启动时获取NPE,我正在检查是否bundle!= null,但是,看起来,就像从Bundle的第二个活动返回后,它仍然没有运行" if"身体。 这是我的第一个活动代码的一部分

Bundle bundle = getIntent().getExtras();
    if (bundle!=null) {
            Player player = new Player();
            player.setStatus(bundle.getInt("Status"));
            player.setName(bundle.getString("Name"));
            addPlayerToList(player);
            Log.e("Player with a name " + player.getName(), "Has been   created");
    }

第二项活动的代码

 submitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            name = nameEditText.getText().toString();
            if (defaultRadioButton.isChecked()) {
                status=0;
            } else if (driverRadioButton.isChecked()) {
                status=1;
            } else {
                Toast.makeText(getApplicationContext(), "Suka viberi galochku", Toast.LENGTH_SHORT).show();
            }
            Intent i = new Intent(getApplicationContext(),StartActivity.class);
            Bundle bundle = new Bundle();
            bundle.putInt("Status",status);
            bundle.putString("Name", name);
            Log.d("Object " + name, "Status: " + status);
            startActivity(i);
        }
    });

感谢您提供任何帮助/建议

3 个答案:

答案 0 :(得分:0)

尝试Intent.putExtra()而不是将数据放入数据包中,并使用Intent.getStringExtra()获取字符串数据;

答案 1 :(得分:0)

在您的代码中,没有代码可以将bundle放入intent。实际上你从未将包传递给第一个活动。您可以使用此answer来解决您的问题。

祝你好运!

答案 2 :(得分:0)

在这种情况下使用startActivityForResult()

1)您使用此方法打开第一个活动,而不是startActivity()
2)在第二项活动中做任何你想做的事 3)设置结果包
4)完成活动
5)在第一个活动中打开包

在您的情况下,它将如下所示:

1)像这样召唤第二项活动:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, REQUEST_SECOND_ACTIVITY); // request code const

2-4)

submitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            name = nameEditText.getText().toString();
            if (defaultRadioButton.isChecked()) {
                status=0;
            } else if (driverRadioButton.isChecked()) {
                status=1;
            } else {
                Toast.makeText(getApplicationContext(), "Suka viberi galochku", Toast.LENGTH_SHORT).show();
            }

            final Intent returnIntent = new Intent();
            returnIntent.putExtra("Status", status); // set values
            returnIntent.putExtra("Name", name);
            setResult(Activity.RESULT_OK, returnIntent); // set result code
            finish(); // finish this activity and go back to the previous one
        }
    });

5)在第一个活动中重写此方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    switch(requestCode) {
        case REQUEST_SECOND_ACTIVITY: // same request code const
            if(resultCode == Activity.RESULT_OK){
                Player player = new Player();
                player.setStatus(data.getIntExtra("Status"));
                player.setName(data.getStringExtra("Name"));
                addPlayerToList(player);
            }
            break;
    }
}