我有两个活动,活动A和B.当用户点击活动A中的topicTextView时,会将他带到活动B,用户选择主题并将selectedTopic传递给活动A.
我已实施以下内容,但在打开活动A时,应用首次崩溃。
活动A
@Override
protected void onCreate(Bundle savedInstanceState) {
topicTextView = (TextView) findViewById(R.id.topicTextView);
// crashes in the following line
String selectedTopic = getIntent().getExtras().getString("selectedTopic");
if (selectedTopic != null && !selectedTopic.isEmpty()) {
topicTextView.setText(selectedTopic);
}
}
活动B
@Override
protected void onCreate(Bundle savedInstanceState) {
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Intent i = new Intent(ActivityB.this, ActivityA.class);
i.putExtra("selectedTopic", topics[position].toString());
startActivity(i);
}
});
}
答案 0 :(得分:2)
在获取值之前,检查天气Bundle
是否具有该值。在您的情况下,问题是当您第一次运行时,getIntent().getExtras().getString("selectedTopic");
将返回null
if(getIntent().hasExtra("selectedTopic"))
{
String selectedTopic = getIntent().getExtras().getString("selectedTopic");
if (selectedTopic != null && !selectedTopic.isEmpty()) {
topicTextView.setText(selectedTopic);
}
}
另一个好方法是使用startActivityForResult()
并传递活动B中的值,您将在活动A的onActivityResult()
中获得该值,请查看此问题的reference问题
答案 1 :(得分:1)
它是空的,因为你第一次来活动A,你没有在意图中的那个字符串,所以检查意图中是否存在该字符串
if(getIntent().hasExtra("selectedTopic")){
String selectedTopic = getIntent().getExtras().getString("selectedTopic");
if (selectedTopic != null && !selectedTopic.isEmpty()) {
topicTextView.setText(selectedTopic);
}
}
最好是使用startActivityForResult()来实现这个
答案 2 :(得分:0)
更改您的代码:
String selectedTopic = null;
if(getIntent() != null && getIntent().getExtras() != null && getIntent().hasExtra("selectedTopic")){
selectedTopic = getIntent().getExtras().getString("selectedTopic");
}
if (selectedTopic != null && !selectedTopic.isEmpty()) {
topicTextView.setText(selectedTopic);
}