首页 > 解决方案 > 如何通过一个按钮将 EditText 值传递给两个不同的活动?

问题描述

所以我想使用一个按钮(提交按钮)将 EditText 值传递给两个不同的活动。从逻辑上讲,我做的一切都是正确的,但它不起作用,我不知道为什么。我认为这行不通。这是我的第一个活动代码:

public class TwoTeam extends AppCompatActivity {

    EditText first_name, second_name;
    String name_first, name_second;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two_team);
        first_name = findViewById(R.id.first_name);
        second_name = findViewById(R.id.second_name);

    }

    public void submit_button(View view) {
        Intent intent = new Intent(TwoTeam.this, Begin.class);{
            name_first = first_name.getText().toString();
            name_second = second_name.getText().toString();
            intent.putExtra("name1", name_first);
            intent.putExtra("name2", name_second);
            intent.putExtra("turn1", name_first + "'s Turn");
            startActivity(intent);
        }
        Intent in = new Intent(TwoTeam.this, Begindup.class);{
            name_first = first_name.getText().toString();
            name_second = second_name.getText().toString();
            in.putExtra("name1dup", name_first);
            in.putExtra("name2dup", name_second);
            in.putExtra("turn2", name_second + "'s Turn");
        }
    }
}

这是我的第二个活动代码:

public class Begin extends AppCompatActivity {

    private TextView first_name, second_name, first_turn, words;
    String name_first, name_second, turn_first;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_begin);
        first_name = findViewById(R.id.name_first);
        second_name = findViewById(R.id.name_second);
        first_turn = findViewById(R.id.first_turn);

        name_first = getIntent().getExtras().getString("name1");
        first_name.setText(name_first);

        name_second = getIntent().getExtras().getString("name2");
        second_name.setText(name_second);

        turn_first = getIntent().getExtras().getString("turn1");
        first_turn.setText(turn_first);
    }
}

这是我的第三个活动代码:

public class Begindup extends AppCompatActivity {

    private TextView first_name, second_name, second_turn, words;
    String name_first, name_second, turn_second;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_begindup);
        first_name = findViewById(R.id.name_first);
        second_name = findViewById(R.id.name_second);
        second_turn = findViewById(R.id.second_turn);

        name_first = getIntent().getExtras().getString("name1dup");
        first_name.setText(name_first);

        name_second = getIntent().getExtras().getString("name2dup");
        second_name.setText(name_second);

        turn_second = getIntent().getExtras().getString("turn2");
        second_turn.setText(turn_second);
    }
}

错误输出是这样的:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference

有时这也是:

Unknown bits set in runtime_flags: 0x8000

标签: javaandroid-studio

解决方案


可能缺少代码信息。我认为 NPE 发生在内部Begin.class,对吧?

您可以尝试直接使用getIntent().getStringExtra("name1");而不是getIntent().getExtras().getString("name1");. 这样,您的代码不再需要检索 Bundle 对象(可能为空),而是直接检索您需要的额外字符串。


推荐阅读