设置.getIntent()时的默认值.getExtras()为null

时间:2015-06-15 20:43:44

标签: java android

我试图将用户输入从几个EditText字段提取到另一个活动中。特别是,我想在应用程序的另一个活动中使用用户输入的团队名称。

所以,从这里接受输入:

enter image description here

并在此处使用:

enter image description here

如上图所示,当用户输入几个团队名称时,我已经成功实现了这一点,我正在处理getIntent().getExtras()

但是,如果用户点击了" Start Scorekeeper"按钮没有输入任何球队名称,我得到以下内容:

enter image description here

但是,我想设置" Team A"的默认团队名称。和" B队"。

我已尝试通过以下方式完成此操作(但尚无效):

TeamSelector.java

public void onClick(View view) {
    Intent i = new Intent(this, ScoreKeeper.class);

    final EditText teamAInput = (EditText) findViewById(R.id.team_a_input);
    String teamAName = teamAInput.getText().toString();
    i.putExtra("teamA", teamAName);

    final EditText teamBInput = (EditText) findViewById(R.id.team_b_input);
    String teamBName = teamBInput.getText().toString();
    i.putExtra("teamB", teamBName);

    startActivity(i);
}

然后在我拿起意图时创建条件。

ScoreKeeper.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_score_keeper);

    Bundle teamNames = getIntent().getExtras();
    if(teamNames==null){
        final TextView teamAText = (TextView) findViewById(R.id.teamAText);
        teamAText.setText(getString(R.string.team_a_name));

        final TextView teamBText = (TextView) findViewById(R.id.teamBText);
        teamBText.setText(getString(R.string.team_b_name));
    }
    else {
        String teamA = teamNames.getString("teamA");
        final TextView teamAText = (TextView) findViewById(R.id.teamAText);
        teamAText.setText(teamA);

        String teamB = teamNames.getString("teamB");
        final TextView teamBText = (TextView) findViewById(R.id.teamBText);
        teamBText.setText(teamB);
    }
}

我也尝试过编码XML中的默认字符串,这些字符串没有效果(为简洁起见,只包括一个团队):

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fontFamily="sans-serif-medium"
    android:gravity="center"
    android:padding="16dp"
    android:text="@string/team_a_name"
    android:id="@+id/teamAText"
    android:textColor="@android:color/black"
            android:textSize="14sp" />

.getIntent().getExtras()为空时,有没有办法有效地设置默认值?

4 个答案:

答案 0 :(得分:1)

试试这个:

public void onClick(View view) {
    Intent i = new Intent(this, ScoreKeeper.class);

    final EditText teamAInput = (EditText) findViewById(R.id.team_a_input);
    String teamAName = teamAInput.getText().toString();
    if(teamAName.trim().equals("")) teamAName="Team A";
    i.putExtra("teamA", teamAName);

    final EditText teamBInput = (EditText) findViewById(R.id.team_b_input);
    String teamBName = teamBInput.getText().toString();
    if(teamBName.trim().equals("")) teamBName="Team B";
    i.putExtra("teamB", teamBName);

    startActivity(i);
}

答案 1 :(得分:1)

字符串不会为空,意图也不一定。字符串将是零长度字符串,您可以使用String.isEmpty()进行测试。

答案 2 :(得分:1)

EditText中的String永远不会为空。它可以是空的但不是空的。

像这样的简单检查就可以了

DBCC checkident ('inspectionitem', reseed, 9990) 

答案 3 :(得分:1)

尝试改变这一点:

teamAText.setText(getString(R.string.team_a_name));
teamBText.setText(getString(R.string.team_b_name));

到此:

teamAText.setText(R.string.team_a_name);
teamBText.setText(R.string.team_b_name);

这是因为getString需要int作为参数而您的R.string.team_a_nameR.string.team_b_nameStrings所以您不必转换它再次(他们不是ints)。

我希望它会对你有所帮助!