【发布时间】:2019-03-04 10:38:18
【问题描述】:
我正在尝试将字符串从片段传递到活动,而不是该片段的父级。活动从片段开始。问题是,当我尝试获取字符串时,它返回 null。我不知道为什么。 这是代码: 片段内部:
loginButton.setOnClickListener(new View.OnClickListener() {
@SuppressLint("ResourceType")
@Override
public void onClick(View v) {
String email = emailText.getText().toString();
String password = passwordText.getText().toString();
String organizationName = orgSpinner.getSelectedItem().toString();
System.out.println("username loges in for organization " + organizationName + " with email " + email + " and pass : " + password);
Intent intent = new Intent(getActivity(), HomePageActivity.class);
GetUserTask task = new GetUserTask();
task.execute(1);
Bundle extras = new Bundle();
extras.putString("WELCOME_MSG", welcomeMsg);
//intent.putExtra("WELCOME_MSG", welcomeMsg);
System.out.println("!!"+ extras.getString("WELCOME_MSG"));
intent.putExtras(extras);
startActivity(intent);
}
});
return view;
}
在 HomePageActivity 中我试图读取字符串:
Bundle extras = getIntent().getExtras();
if (extras != null) {
//String msg = getIntent().getStringExtra("WELCOME_MSG");
String msg = extras.getString("WELCOME_MSG");
System.out.println("HEREEE : " + msg);
welcomeMsg.setText(msg);
} else {
System.out.println("No extras");
}
来自两个 sout 调用(来自片段和来自活动)我得到空值。 我希望有人能弄清楚我为什么会这样。谢谢你。
【问题讨论】:
-
不清楚您在哪里定义了
welcomeMsg以及您在哪里为其赋值。请也添加这些代码。 -
在此处找到的相同内容
welcomeMsg未在此处找到。您是否尝试过调试应用程序并检查分配给welcomeMsg的值? -
对不起,我误删了一行。 welcomeMsg 被声明为私有实例变量并被赋值为:welcomeMsg = findViewById(R.id.welcomeTextView);不得不提一下,welcomeMsg 是在 setText 调用之后设置的。
-
片段welcomeMsg内部是一个私有字符串,并在私有类中设置:
code私有类GetUserTask extends AsyncTask{ @Override protected User doInBackground(Integer... integers) { UserRepository userRepository = new UserRepository();用户 userData = userRepository.getUser(integers[0]);返回用户数据; } @Override protected void onPostExecute(User user) { welcomeMsg = "Welcome, " + user.getFirstName() + "!"; } } -
您正在使用在后台线程中运行的 AsyncTask,在将值分配给 "welcomeMsg = "Welcome, " + user.getFirstName() + "!"; }" 空值之前被放入捆绑包中另一个活动开始了,所以它在另一个活动中得到空值。
标签: android android-activity arguments fragment