0

因此,我正在尝试为二十一点创建一个算牌应用程序,但是当我尝试设置某人正在玩的牌组数量并从可编辑的 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 发生在可编辑的编辑之后。接下来,我尝试通过单击将其放在代码块之后,并且仍然会出现相同的结果,但显然这会停止,因为 EditText 是空的。

编辑:EditText 框是基于数字的 EditText 框,因此唯一有效的输入是数字

4

3 回答 3

2
numberOfDecks = Integer.parseInt(numberField.getText().toString());

您从文本字段中获得的值似乎不是有效数字。在 try/catch 中执行此操作

try
{
numberOfDecks = Integer.parseInt(numberField.getText().toString());
}catch(NumberFormatException e)
{
  e.printStackTrace();
}

这将至少使应用程序免于因异常而崩溃。如果发生这种异常,您需要编写替代流程。以及确保您从文本字段中获得有效值。

于 2013-07-02T16:48:37.770 回答
0

也许你在那里有一个额外的字符,比如回车之类的。

尝试这个:

numberOfDecks = Integer.valueOf(numberField.getText().toString().trim()); 

我也从不使用 parseInt。我真的不知道技术上的区别,但 valueOf 调用似乎对我更有效

于 2013-07-02T17:40:26.907 回答
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();
        }
     }
});
于 2013-07-02T17:28:52.700 回答