所以我正在尝试为二十一点创建一个卡片计数应用程序,但是当我尝试设置某人正在玩的套牌数量并从可编辑的editText中抓取它时,程序似乎崩溃了。特别是它说“不幸”我的应用程序“已被停止。”
以下是我所做的代码。
public int numberOfDecks;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activityName)
final EditText numberField = (EditText) findViewById(R.id.editNumber);
Button button = (Button) findViewById(R.id.buttonDecks);
button.setOnClickListener(new OnclickListener() {
public void onClick(View arg0) {
numberOfDecks = Integer.parseInt(numberField.getText().toString());
//Because this didn't work I also tried doing
//numberOfDecks = Integer.getInteger(numberField.getText().toString());
//However both yield the same problem
}
}
}
起初我认为它与on click方法的问题和解析int有关,或者可能是一个空白的EditText字段但是,这个onClick发生在editable编辑后。接下来我尝试将它放在代码块之后点击,同样的结果仍然发生在之前,但显然这会因为EditText为空而停止。
编辑:EditText框是一个基于数字的EditText框,因此唯一有效的输入是数字
答案 0 :(得分:2)
numberOfDecks = Integer.parseInt(numberField.getText().toString());
您从文本字段获得的值似乎不是有效数字。在try / catch
中执行此操作try
{
numberOfDecks = Integer.parseInt(numberField.getText().toString());
}catch(NumberFormatException e)
{
e.printStackTrace();
}
这将至少保存应用程序免于因异常而崩溃。如果发生所有此异常,则需要对备用流进行编码。同时确保从文本字段中获取有效值。
答案 1 :(得分:0)
就像之前所说的那样,你试图得到一个不是有效数字的值。
要修复它,您可以使用try / catch语句,并在输入值无效时以Toast的形式输出某种错误消息:
try
{
numberOfDecks = Integer.parseInt(numberField.getText().toString());
}catch(Throwable t)
{
Toast.makeText(this, "Error: Please use a number as input", Toast.LENGTH_SHORT).show();
}
另一种方法(我个人在我遇到这种情况时在我的应用中使用的方法)是将EditText属性inputType
设置为 number ,甚至 numberSigned 如果你确实接受正数和负数。这样,用户只能输入数字而不能输入任何其他数字。 layout.xml中的EditText类似于:
<EditText
android:id="@+id/editNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:hint="Insert a number"
android:inputType="number" />
然后我会在按下按钮时验证输入是否为空:
button.setOnClickListener(new OnclickListener() {
public void onClick(View arg0) {
if (!numberField.getText().toString().equals("")) {
numberOfDecks = Integer.parseInt(numberField.getText().toString());
// DO WHAT YOU WANT WITH THE NUMBER VALUE
}
else {
Toast.makeText(this, "Error: Choose the number of decks", Toast.LENGTH_SHORT).show();
}
}
});
答案 2 :(得分:0)
也许你在那里有一个额外的字符,如回车或其他东西。
试试这个:
numberOfDecks = Integer.valueOf(numberField.getText().toString().trim());
另外,我从不使用parseInt。我真的不知道技术上的区别,但是值得调用似乎对我来说效果更好