当我尝试从EditText中获取文本并将其转换为整数时,应用程序崩溃

时间:2013-07-02 16:47:21

标签: java android exception android-edittext android-appwidget

所以我正在尝试为二十一点创建一个卡片计数应用程序,但是当我尝试设置某人正在玩的套牌数量并从可编辑的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框,因此唯一有效的输入是数字

3 个答案:

答案 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。我真的不知道技术上的区别,但是值得调用似乎对我来说效果更好