我有一个EditText,当我将其设置为Empty并单击我的按钮时,我的应用程序崩溃了。
当我在Android Monitor中查看它时,它指向以下行:
final int addTm = Integer.parseInt(Teaching);
这是我的代码:
的LinearLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="2dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:text="" />
<EditText
android:id="@+id/tM"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="24dp"
android:layout_marginRight="50dp"
android:ems="1"
android:inputType="number"
android:maxLength="1"
android:text="0" />
<Button
android:id="@+id/submitBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit" />
</LinearLayout>
我的Java代码:
Submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String Teaching = Tm.getText().toString();
final int addTm = Integer.parseInt(Teaching);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("sub").child("TM");
myRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Integer currentValue = mutableData.getValue(Integer.class);
if (currentValue == null) {
mutableData.setValue(0);
} else {
mutableData.setValue(currentValue + addTm);
}
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean committed, DataSnapshot dataSnapshot) {
System.out.println("Transaction completed");
}
});
}
});
答案 0 :(得分:1)
其他答案都很好,但我建议用NumberFormatException
的try / catch包装。我知道你的输入设置只接受数字,但总是比抱歉更安全。
小写String变量Teaching。在Java中,我们只有大写的Type名称。 (类,接口等)请注意StackOverflow如何突出显示变量教学蓝色,有点迷惑吗?
为您的会员字段以及Tm和Submit执行此操作。他们应该写下来并提交。此外,Tm也不是变量的描述性名称。想象一下,另一位程序员进来看着你的代码,并想知道什么是tm。这个tm的背景是什么,它来自哪里......它做了什么?它是一个少年突变者吗?
无论何时使用Integer.parseInt
将其包装在try / catch:
@Override
public void onClick(View view){
final int addTm;
try {
String teaching = Tm.getText().toString();
addTm = Integer.parseInt(teaching);
} catch (NumberFormatException e) {
addTm = 0;
}
// ...
}
你为什么要这样做?如果我在您的号码输入中输入十进制数怎么办?
使用您接受的答案,您仍然会崩溃。 Integer.parseInt
不会解析十进制数。
或者,如果我切换设备的区域设置并输入一个Integer.parseInt
不期望的奇数字符的数字,那该怎么样。
要抓住该异常才能完全证明。
答案 1 :(得分:0)
在空字符串throws an NumberFormatException
上执行Integer.parseInt()
时。
首先,检查Teaching
的值,并确认它不是空字符串,或者 - {for {catch} NumberFormatException
,并为Teaching
设置所需的值在那种情况下。