Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我试图从EditText获取文本并将其转换为整数时,应用程序崩溃_Java_Android_Exception_Android Edittext_Android Appwidget - Fatal编程技术网

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

Java 当我试图从EditText获取文本并将其转换为整数时,应用程序崩溃,java,android,exception,android-edittext,android-appwidget,Java,Android,Exception,Android Edittext,Android Appwidget,因此,我试图为21点创建一个卡片计数应用程序,但是当我试图设置某人正在玩的牌组数量并从可编辑文本中抓取它时,程序似乎崩溃了。特别是它说“不幸的是”我的应用程序“已经停止。” 以下是我所做工作的代码 public int numberOfDecks; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView

因此,我试图为21点创建一个卡片计数应用程序,但是当我试图设置某人正在玩的牌组数量并从可编辑文本中抓取它时,程序似乎崩溃了。特别是它说“不幸的是”我的应用程序“已经停止。”

以下是我所做工作的代码

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
          }
      }
}

起初,我认为这与单击方法和解析int有关,或者可能是一个空白的EditText字段。然而,这个onClick是在使用编辑后发生的。接下来,我尝试将它放在代码块之后并单击,但仍然会出现相同的结果,但很明显,这会停止,因为EditText是空的

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

numberOfDecks = Integer.parseInt(numberField.getText().toString());
从文本字段中获取的值似乎不是有效的数字。在里面做这个试试看

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

这将至少避免应用程序因异常而崩溃。如果发生此异常,则需要编写备用流代码。还要确保您从文本字段中获取的值是有效的。

如前所述,您试图获取的值似乎不是有效的数字

要解决此问题,可以使用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" />

也许你有一个额外的字符在那里像一个马车返回或什么的

试试这个:

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

而且我从不使用parseInt。我真的不知道技术上的区别,但通话的价值似乎对我更有效

不是跟踪你,而是在真正的困难中,伙计!!非常感谢你的帮助!!牵牛星正在跟踪你,伙计。@AltairRules:如果你是投票人,请不要这样做。这是违反上述政策的。任何来自不规则模式的升级都将被删除。实际上,我喜欢你答案中的这句话,任何程序员都会升级它,因为这是一个很好的编程实践:
这至少可以将应用程序从崩溃状态保存到异常状态。如果发生此异常,您需要对备用流进行编码。
@AltairRules:没问题。请注意。可能是编辑文本值无法转换为整数,如果您想要用户类型编号,您可以将edittext的inputtype设置为数字。因此,android oslogcat向用户显示数字键盘,以了解详细信息。为了澄清误解,此edittext是基于数字的edittext,因此唯一有效的输入是数字
numberOfDecks = Integer.valueOf(numberField.getText().toString().trim());