getStringExtra()返回NullPointerException

时间:2014-02-14 06:40:38

标签: android android-intent android-activity

我正在尝试编写一个简单的应用程序,在按下按钮时将打开一个新活动。然后,用户可以在文本字段中输入一些文本,然后按下Enter按钮可将其返回到主要活动,TextView应显示他们输入的文本。

在我的主要活动课程中,我按下按钮时启动新活动,如下所示:

private void startExplicitActivation() {
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    startActivityForResult(intent, GET_TEXT_REQUEST_CODE);
}

我还在我的主要活动类中定义了onActivityResult(),如下所示:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == GET_TEXT_REQUEST_CODE) {
                mUserTextView.setText(data.getStringExtra("input"));
        }
    }
}

其中mUserTextView是我想根据用户在第二个活动中输入的文本更改的TextView对象。它已在主要活动的onCreate()方法中初始化。

在我的第二个活动中,我尝试创建一个新的Intent,并在点击按钮时调用putExtra()

private void enterClicked() {
    String input = mEditText.getText().toString();

    Intent intent = new Intent();
    intent.putExtra("input", input);

    setResult(RESULT_OK);
    finish();
}

我已尝试对此进行调试,并且可以从mEditText获取文本并将其分配给input。在我的Intent对象中,它会将文本正确地放入input,但当我回到主要活动时,它会给我一个错误:

Caused by: java.lang.NullPointerException

指向这一行:

mUserTextView.setText(data.getStringExtra("input"));

这是因为我使用了finish()方法吗?我认为在完成一项活动后使用它是合适的,但是我应该这样做:

private void enterClicked() {
    String input = mEditText.getText().toString();

    Intent intent = new Intent(SecondActivity.this, MainActivity.class);
    intent.putExtra("input", input);

    setResult(RESULT_OK);
    startActivity(intent);
}

3 个答案:

答案 0 :(得分:2)

替换

setResult(RESULT_OK);

setResult(RESULT_OK,intent);

如果您想将信息传递给来电者Activity,请通过Intent发回结果,不要在Activity中再次启动enterClicked()。只需在finish()之后致电setResult()即可。这将调用onActivityResult()来电者Activity,其中Intent data参数包含您传递的信息...

答案 1 :(得分:1)

你必须像这样从被叫intent发回ActivitysetResult(RESULT_OK,intent);

答案 2 :(得分:0)

你错过了设定结果的意图。像这样setResult(RESULT_OK,intent);

添加它