我正在尝试编写一个简单的应用程序,在按下按钮时将打开一个新活动。然后,用户可以在文本字段中输入一些文本,然后按下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);
}
答案 0 :(得分:2)
替换
setResult(RESULT_OK);
与
setResult(RESULT_OK,intent);
如果您想将信息传递给来电者Activity
,请通过Intent
发回结果,不要在Activity
中再次启动enterClicked()
。只需在finish()
之后致电setResult()
即可。这将调用onActivityResult()
来电者Activity
,其中Intent data
参数包含您传递的信息...
答案 1 :(得分:1)
你必须像这样从被叫intent
发回Activity
:
setResult(RESULT_OK,intent);
答案 2 :(得分:0)
你错过了设定结果的意图。像这样setResult(RESULT_OK,intent);