我正在尝试获取有关用户的一些基本信息,例如身高,体重等。
我正在使用EditText对象和getText()
从用户输入的内容中检索文本。然后我将其转换为字符串,最后使用Integer.parseint(String)
将所有内容转换为int。下面是我试图做的一个例子,如果那令人困惑。
if((height.getText().length() > 0) && (???)) {
mHeight = Integer.parseInt(height.getText().toString());
} else {
Toast.makeText(getBaseContext(), "Please enter your height, in inches, rounded to the nearest inch", Toast.LENGTH_SHORT).show();
canContinue = -1;
}
我使用height.getText().length() > 0
来确保用户至少将某些内容放入字段中,但如果用户放置字符,则程序崩溃。
(???)是我试图在这里完成的断言,当结果不是有效的int时会返回false。另请注意,我将mHeight初始化为原始int int mHeight
注意:height是EditText
对象,我将其初始化为:height = (EditText) findViewById(R.id.height);
答案 0 :(得分:2)
如果不进行一些复杂的验证,我只会尝试解析并捕获任何异常。
//test that the value is not empty and only contains numbers
//to deal with most common errors
if(!height.getText().isEmpty() && height.getText().matches("\\d+")) {
try {
mHeight = Integer.parseInt(height.getText());
} catch (NumberFormatException e) { //will be thrown if number is too large
//error handling
}
}
答案 1 :(得分:1)
使用height.getText().matches("\\d+")
检查这是否只是一个数字
像:
if((height.getText().length() > 0) && height.getText().toString().matches("\\d+")) {
}
答案 2 :(得分:1)
编写以下方法并将其调用而不是" ???"
public static boolean isNumeric(String str)
{
try
{
int d = Integer.parseInt(str);
}
catch(NumberFormatException nfe)
{
return false;
}
return true;
}
答案 3 :(得分:1)
尝试解析它可以捕获任何异常: -
try {
int mHeight = 0;
if (height.getText().length() > 0) {
mHeight = Integer.parseInt(height.getText().toString());
}
} catch (NumberFormatException ex) {
Toast.makeText(getBaseContext(), "Please enter your height, in inches, rounded to the nearest inch", Toast.LENGTH_SHORT).show();
canContinue = -1;
}
答案 4 :(得分:0)
如果您只是想获取数字,请将inputType属性添加到EditText
像
android:inputType="numberDecimal"
然后用户只能在EditText中输入数字,因此在解析时不会出错。