Java 无法通过EditText接受整数值

Java 无法通过EditText接受整数值,java,android,Java,Android,我一直试图通过EditText接受两个值,1)inVal2和2)rate。我使用了Integer类和parseInt()方法以及 android:digits=“0123456789。” android:inputType=“number” 属性将接受的值转换为整数 代码如下: package kk.currency; import android.app.Activity; import android.os.Bundle; import android.view.View; import

我一直试图通过EditText接受两个值,1)inVal2和2)rate。我使用了Integer类和parseInt()方法以及

android:digits=“0123456789。” android:inputType=“number” 属性将接受的值转换为整数

代码如下:

package kk.currency;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class CurrencyActivity extends Activity {
/** Called when the activity is first created. */

EditText inpval1;
EditText inpval2;
EditText rate;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

public void btnclick(View view)  {

        inpval1 = (EditText)findViewById(R.id.away);
        int v1 = Integer.parseInt(inpval1.getText().toString());

        inpval2 = (EditText)findViewById(R.id.home);
        int v2 = Integer.parseInt(inpval2.getText().toString());

        rate = (EditText)findViewById(R.id.rate);
        int r = Integer.parseInt(rate.getText().toString());  

        v1 = v2 * r;

    }

}
现在的问题是,当我单击按钮(onClick=“btnclick”)时,应用程序停止工作

如果我删除

int v1 = Integer.parseInt(inpval1.getText().toString());
int v2 = Integer.parseInt(inpval2.getText().toString());
int r = Integer.parseInt(rate.getText().toString());
点击按钮后,应用程序不会崩溃

以下是logcat错误:

> 05-17 02:59:04.676: D/gralloc_goldfish(869): Emulator without GPU emulation detected.
05-17 02:59:13.907: D/AndroidRuntime(869): Shutting down VM
05-17 02:59:13.907: W/dalvikvm(869): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
05-17 02:59:13.946: E/AndroidRuntime(869): FATAL EXCEPTION: main
05-17 02:59:13.946: E/AndroidRuntime(869): java.lang.IllegalStateException: Could not execute method of the activity
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.view.View$1.onClick(View.java:3044)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.view.View.performClick(View.java:3511)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.view.View$PerformClick.run(View.java:14105)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.os.Handler.handleCallback(Handler.java:605)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.os.Handler.dispatchMessage(Handler.java:92)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.os.Looper.loop(Looper.java:137)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.app.ActivityThread.main(ActivityThread.java:4424)
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.reflect.Method.invokeNative(Native Method)
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.reflect.Method.invoke(Method.java:511)
05-17 02:59:13.946: E/AndroidRuntime(869):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-17 02:59:13.946: E/AndroidRuntime(869):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-17 02:59:13.946: E/AndroidRuntime(869):  at dalvik.system.NativeStart.main(Native Method)
05-17 02:59:13.946: E/AndroidRuntime(869): Caused by: java.lang.reflect.InvocationTargetException
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.reflect.Method.invokeNative(Native Method)
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.reflect.Method.invoke(Method.java:511)
05-17 02:59:13.946: E/AndroidRuntime(869):  at android.view.View$1.onClick(View.java:3039)
05-17 02:59:13.946: E/AndroidRuntime(869):  ... 11 more
05-17 02:59:13.946: E/AndroidRuntime(869): Caused by: java.lang.NumberFormatException: Invalid int: ""
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.invalidInt(Integer.java:138)
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.parseInt(Integer.java:359)
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.parseInt(Integer.java:332)
05-17 02:59:13.946: E/AndroidRuntime(869):  at kk.currency.CurrencyActivity.btnclick(CurrencyActivity.java:24)
05-17 02:59:13.946: E/AndroidRuntime(869):  ... 14 more

有人能帮我吗?我是一个初学者,花了很多时间在这个问题上,试图找到一个解决方案

您应该发布logcat错误,这样我们可以为您提供更多帮助

有两件事可能会导致您的崩溃:

1.)无法将输入解析为整数(值超出范围?正在解析的文本?十进制值?)


2.)您的findViewById调用返回null,当您调用
inpval1.getText().toString()
时,它抛出了一个NullPointerException

您应该发布logcat错误,以便我们可以为您提供更多帮助

有两件事可能会导致您的崩溃:

1.)无法将输入解析为整数(值超出范围?正在解析的文本?十进制值?)

2.)您的findViewById调用返回null,当您调用
inpval1.getText().toString()
时,它会抛出NullPointerException

这是您的问题:

05-17 02:59:13.946: E/AndroidRuntime(869): Caused by: java.lang.NumberFormatException: Invalid int: "" 
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.invalidInt(Integer.java:138) 
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.parseInt(Integer.java:359) 
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.parseInt(Integer.java:332) 
05-17 02:59:13.946: E/AndroidRuntime(869):  at kk.currency.CurrencyActivity.btnclick(CurrencyActivity.java:24) 
05-17 02:59:13.946: E/AndroidRuntime(869):  ... 14 more 
kk.currency.CurrencyActivity.btnclick(CurrencyActivity.java:24)中的
行告诉您,在CurrencyActivity.java文件的第24行,由于无效的int(即空字符串“”)而引发NumberFormatException。这意味着您在单击时其中一个字段为空,它试图将“”解析为整数,并在失败时引发异常。

这是您的问题:

05-17 02:59:13.946: E/AndroidRuntime(869): Caused by: java.lang.NumberFormatException: Invalid int: "" 
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.invalidInt(Integer.java:138) 
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.parseInt(Integer.java:359) 
05-17 02:59:13.946: E/AndroidRuntime(869):  at java.lang.Integer.parseInt(Integer.java:332) 
05-17 02:59:13.946: E/AndroidRuntime(869):  at kk.currency.CurrencyActivity.btnclick(CurrencyActivity.java:24) 
05-17 02:59:13.946: E/AndroidRuntime(869):  ... 14 more 
String s1 = inpval1.getText().toString();
String s2 = inpval2.getText().toString();
String s3 = rate.getText().toString();

int v1=Integer.parseInt(s1);
int v2=Integer.parseInt(s2);
int r = Integer.parseInt(s3);


kk.currency.CurrencyActivity.btnclick(CurrencyActivity.java:24)中的
行告诉您,在CurrencyActivity.java文件的第24行,由于无效的int(即空字符串“”)而引发NumberFormatException。这意味着您正在单击其中一个字段为空,它试图将“”解析为整数,并在失败时引发异常。

您应该检查LogCat视图,查看到底引发了什么异常以及在哪里引发异常。它将告诉您错误以及发生错误的确切代码行。我必须假设您在其中一个EditText中输入了一个不可解析的值——不是整数,或者留空——因此抛出NumberFormatException(或者ParseException——我忘了是哪个),或者您的EditText对象为null,这意味着您在某个地方出现了XML错误。请查看错误日志,如果您不明白,请将其张贴在此处。我可以看到您的号码在“0123456789”末尾包含一个点。@kcopock Done!我刚挂了日志。还有苏莱曼-我会去掉圆点,然后再检查一遍。@Sleimanjaneidi:包括在内是正常的;所以十进制数是允许的。当然,如果他试图只解析整数,实际上是不允许的。@kcopock你是对的!我留下了一个空白字段。非常感谢你!你应该检查你的LogCat视图,看看到底抛出了什么异常,在哪里。它将告诉您错误以及发生错误的确切代码行。我必须假设您在其中一个EditText中输入了一个不可解析的值——不是整数,或者留空——因此抛出NumberFormatException(或者ParseException——我忘了是哪个),或者您的EditText对象为null,这意味着您在某个地方出现了XML错误。请查看错误日志,如果您不明白,请将其张贴在此处。我可以看到您的号码在“0123456789”末尾包含一个点。@kcopock Done!我刚挂了日志。还有苏莱曼-我会去掉圆点,然后再检查一遍。@Sleimanjaneidi:包括在内是正常的;所以十进制数是允许的。当然,如果他试图只解析整数,实际上是不允许的。@kcopock你是对的!我留下了一个空白字段。非常感谢你!是的,基本上是这样。请记住,仅因为您将输入方法指定为
number
,并不意味着它实际上包含一个数值。它仍然只是一个字符串值,您必须解析它,并适当地处理异常。请记住,仅因为您将输入方法指定为
number
,并不意味着它实际上包含一个数值。它仍然只是一个字符串值,您必须解析它,并适当地处理异常。谢谢!但现在的问题是,如果我想在开始时将字段留空,该怎么办?看,这基本上是一个货币兑换应用程序,我想在点击按钮后用兑换金额填充空白字段。有什么想法吗?!因此,请检查字符串是否可以转换为整数(如果需要,可以使用try-catch),然后决定如何处理错误。看到这个:+1是的,我建议您使用try/catch。它可以让你随心所欲地处理这样的情况。您可以只留下一个空的catch块,也可以停止操作并显示一个AlertDialog,提醒用户输入一个值。谢谢!但现在的问题是,如果我想在开始时将字段留空,该怎么办?看,这基本上是一个货币兑换应用程序,我想在点击按钮后用兑换金额填充空白字段。有什么想法吗?!因此,请检查字符串是否可以转换为整数(如果需要,可以使用try-catch),然后决定如何处理错误。看到这个:+1是的,我建议您使用try/catch。它可以让你随心所欲地处理这样的情况。您可以只留下一个空的catch块,也可以停止操作并显示一个AlertDialog来提醒用户
String s1 = inpval1.getText().toString();
String s2 = inpval2.getText().toString();
String s3 = rate.getText().toString();

int v1=Integer.parseInt(s1);
int v2=Integer.parseInt(s2);
int r = Integer.parseInt(s3);