EditText 到整数 (Android)
EditText to Integer (Android)
我正在尝试将 xml 中数字类型的 EditText 转换为整数,以便以秒为单位计算值。
hoursIn = (EditText) findViewById(R.id.hoursET);
minIn = (EditText) findViewById(R.id.minET);
start = (Button) findViewById(R.id.startButton);
stop = (Button) findViewById(R.id.stopButton);
textViewTime = (TextView) findViewById(R.id.timeDisp);
inHr = Integer.parseInt(hoursIn.getText().toString());
inMin = Integer.parseInt(minIn.getText().toString());
hoursMs = hrsToMs(inHr);
minMs = minToMs(inMin);
totalTime = hoursMs + minMs;
当我评论初始化 inHr 和 inMin 的行时,我在运行时没有收到任何错误,但是当我保留上面的代码时,我收到以下错误:
java.lang.RuntimeException:无法启动 activity ComponentInfo{dit.assignment3/dit.assignment3.Timer}:java.lang.NumberFormatException:无效 int:“”
我也尝试过此操作,但从同一行代码开始出现相同的错误:
final CounterClass timer = new CounterClass(totalTime, 1000);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (hoursIn != null)
{
inHr = Integer.parseInt(hoursIn.getText().toString());
hoursMs = hrsToMs(inHr);
}
if (minIn != null)
{
inMin = Integer.parseInt(minIn.getText().toString());
minMs = minToMs(inMin);
}
else
{
textViewTime.setText("PLEASE GIVE A TIME");
}
totalTime = hoursMs + minMs;
timer.start();
}
});
提前致谢:)
每当您尝试将空字符串解析为整数时,您将得到一个 java.lang.NumberFormatException: Invalid int: ""
。因此需要检查EditText是否为空
你可以很容易地做到这一点
if (hoursIn.getText().toString().matches("")) {
Toast.makeText(this, "You did not enter a text", Toast.LENGTH_SHORT).show();
return;
}
或
你可以简单地做如下检查
if (hoursIn.getText().toString().equals("")) {
Toast.makeText(this, "You did not enter a text", Toast.LENGTH_SHORT).show();
return;
}
我确定此代码块与您在此处显示的完全相同。这意味着您正在直接初始化 EditText
并立即调用 getText()
导致 Exception
.
的方法
初始化后不会立即有任何值,因此当调用 Integer.parseInt
为空值时您会得到 NumberFormatException
。
所以我建议你把这些代码放在像这里的 buttonClicked
这样的事件中,这样你就可以确定你已经输入了一些文本。最好也检查 empty
,
public void buttonClicked(View v){
inHr = Integer.parseInt(hoursIn.getText().toString());
inMin = Integer.parseInt(minIn.getText().toString());
}
首先,您必须将要从 edittext 读取的行放在某些事件(例如单击按钮)中。然后检查edittext中是否输入了任何内容,然后使用try/catch子句将其转换为数字。
试试这个代码。
将按钮添加到您的 activity xml 文件:
<Button
android:height="wrap_content"
android:width="wrap_content"
android:onClick="myClickHandler" />
hoursIn = (EditText) findViewById(R.id.hoursET);
minIn = (EditText) findViewById(R.id.minET);
start = (Button) findViewById(R.id.startButton);
stop = (Button) findViewById(R.id.stopButton);
textViewTime = (TextView) findViewById(R.id.timeDisp);
public void myClickHandler(View v){
if (hoursIn.getText().toString().matches("") || minIn.getText().toString().matches("")){
Toast.makeText(this, "You did not enter a text",Toast.LENGTH_SHORT).show();
return;
} else {
try {
inHr = Integer.parseInt(hoursIn.getText().toString());
inMin = Integer.parseInt(minIn.getText().toString());
hoursMs = hrsToMs(inHr);
minMs = minToMs(inMin);
totalTime = hoursMs + minMs;
Log.i("success");
} catch (NumberFormatException e) {
Toast.makeText(this, "Please enter number only",Toast.LENGTH_SHORT).show();
return;
}
}
}
我正在尝试将 xml 中数字类型的 EditText 转换为整数,以便以秒为单位计算值。
hoursIn = (EditText) findViewById(R.id.hoursET);
minIn = (EditText) findViewById(R.id.minET);
start = (Button) findViewById(R.id.startButton);
stop = (Button) findViewById(R.id.stopButton);
textViewTime = (TextView) findViewById(R.id.timeDisp);
inHr = Integer.parseInt(hoursIn.getText().toString());
inMin = Integer.parseInt(minIn.getText().toString());
hoursMs = hrsToMs(inHr);
minMs = minToMs(inMin);
totalTime = hoursMs + minMs;
当我评论初始化 inHr 和 inMin 的行时,我在运行时没有收到任何错误,但是当我保留上面的代码时,我收到以下错误:
java.lang.RuntimeException:无法启动 activity ComponentInfo{dit.assignment3/dit.assignment3.Timer}:java.lang.NumberFormatException:无效 int:“”
我也尝试过此操作,但从同一行代码开始出现相同的错误:
final CounterClass timer = new CounterClass(totalTime, 1000);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (hoursIn != null)
{
inHr = Integer.parseInt(hoursIn.getText().toString());
hoursMs = hrsToMs(inHr);
}
if (minIn != null)
{
inMin = Integer.parseInt(minIn.getText().toString());
minMs = minToMs(inMin);
}
else
{
textViewTime.setText("PLEASE GIVE A TIME");
}
totalTime = hoursMs + minMs;
timer.start();
}
});
提前致谢:)
每当您尝试将空字符串解析为整数时,您将得到一个 java.lang.NumberFormatException: Invalid int: ""
。因此需要检查EditText是否为空
你可以很容易地做到这一点
if (hoursIn.getText().toString().matches("")) {
Toast.makeText(this, "You did not enter a text", Toast.LENGTH_SHORT).show();
return;
}
或
你可以简单地做如下检查
if (hoursIn.getText().toString().equals("")) {
Toast.makeText(this, "You did not enter a text", Toast.LENGTH_SHORT).show();
return;
}
我确定此代码块与您在此处显示的完全相同。这意味着您正在直接初始化 EditText
并立即调用 getText()
导致 Exception
.
初始化后不会立即有任何值,因此当调用 Integer.parseInt
为空值时您会得到 NumberFormatException
。
所以我建议你把这些代码放在像这里的 buttonClicked
这样的事件中,这样你就可以确定你已经输入了一些文本。最好也检查 empty
,
public void buttonClicked(View v){
inHr = Integer.parseInt(hoursIn.getText().toString());
inMin = Integer.parseInt(minIn.getText().toString());
}
首先,您必须将要从 edittext 读取的行放在某些事件(例如单击按钮)中。然后检查edittext中是否输入了任何内容,然后使用try/catch子句将其转换为数字。
试试这个代码。
将按钮添加到您的 activity xml 文件:
<Button
android:height="wrap_content"
android:width="wrap_content"
android:onClick="myClickHandler" />
hoursIn = (EditText) findViewById(R.id.hoursET);
minIn = (EditText) findViewById(R.id.minET);
start = (Button) findViewById(R.id.startButton);
stop = (Button) findViewById(R.id.stopButton);
textViewTime = (TextView) findViewById(R.id.timeDisp);
public void myClickHandler(View v){
if (hoursIn.getText().toString().matches("") || minIn.getText().toString().matches("")){
Toast.makeText(this, "You did not enter a text",Toast.LENGTH_SHORT).show();
return;
} else {
try {
inHr = Integer.parseInt(hoursIn.getText().toString());
inMin = Integer.parseInt(minIn.getText().toString());
hoursMs = hrsToMs(inHr);
minMs = minToMs(inMin);
totalTime = hoursMs + minMs;
Log.i("success");
} catch (NumberFormatException e) {
Toast.makeText(this, "Please enter number only",Toast.LENGTH_SHORT).show();
return;
}
}
}