数字TextField上的setText强制关闭应用程序

时间:2012-07-06 06:52:20

标签: java android string split

我在EditTexts上设置初始输入时遇到了问题。每当我传递一个包含前一个活动的字符串的意图时,它就会导致强制关闭。

我的程序的主要要点是,先前的活动将包含字符串的intent发送到editText活动。如果它未初始化,则editTexts为空,否则,它们包含上一屏幕中TextView中显示的值。这是我的代码:

EditText month, day, year;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.lab2_082588birthday);

    Intent startUp = getIntent();
    String receivedString = startUp.getStringExtra(Lab2_082588part2.BIRTHDAY_STRING);

    if(receivedString.trim().length() > 0){
        String[] separated = receivedString.split("/");

        int stringMonth = Integer.parseInt(separated[0]);
        int stringDay = Integer.parseInt(separated[1]);
        int stringYear = Integer.parseInt(separated[2]);

        month.setText(stringMonth);
        day.setText(stringDay);
        year.setText(stringDay);

    }
}

这是我的 LogCat

07-06 15:05:19.918: E/AndroidRuntime(276): Caused by: java.lang.NullPointerException

07-06 15:05:19.918: E/AndroidRuntime(276):  at com.android.rondrich.Lab2_082588birthday.onCreate(Lab2_082588birthday.java:34)

07-06 15:05:19.918: E/AndroidRuntime(276):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

07-06 15:05:19.918: E/AndroidRuntime(276):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

3 个答案:

答案 0 :(得分:1)

如果receivedString的格式不是确保它有2个斜杠(“/”),则字符串数组separated将不具有您需要的3个值。

这将产生IndexOutOfBoundsException

修改

您必须使用反斜杠"\/"来转义斜杠字符。

答案 1 :(得分:0)

首先初始化textView setContentView(R.layout.lab2_082588birthday); as:

month = (TextView)findViewById(R.id.month);
 day = (TextView)findViewById(R.id.day);
 month = (TextView)findViewById(R.id.year);

然后将Integer值设为TextView为:

month.setText(stringMonth+"");
day.setText(stringDay+"");
year.setText(stringDay+"");

month.setText(String.valueOf(stringMonth));
day.setText(String.valueOf(stringDay));
year.setText(String.valueOf(stringDay));

之后提供logcat: 在将String转换为int之前检查数组lenth :

if(separated.length >0)
{
        int stringMonth = Integer.parseInt(separated[0]);
        int stringDay = Integer.parseInt(separated[1]);
        int stringYear = Integer.parseInt(separated[2]);

        month.setText(stringMonth+"");
        day.setText(stringDay+"");
        year.setText(stringDay+"");
}

答案 2 :(得分:0)

你必须改变这一行

    month.setText(stringMonth);
    day.setText(stringDay);
    year.setText(stringDay);

by bcz stringMonth,stringDay等是整数,你必须在textview中设置这种方式

    month.setText(""+stringMonth);
    day.setText(""+stringDay);
    year.setText(""+stringDay);

其他方式是

    month.setText(String.valueOf(stringMonth));
    day.setText(String.valueOf(stringDay));
    year.setText(String.valueOf(stringDay));