我知道他曾被问过几次,但我一直在尝试一切没有运气的事情。我还有错误。这是我的代码。
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:background="@android:color/transparent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Write item value."
android:textColor="@android:color/black"
android:textSize="25dp" />
<EditText
android:id="@+id/editText1"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginBottom="202dp"
android:ems="10"
android:hint="Value"
android:inputType="number" >
<requestFocus />
</EditText>
的java
public class PopupValores extends Activity {
EditText valor1;
String myEditValue;
public static int valor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popupvalores);
valor1 = (EditText) findViewById (R.id.editText1);
myEditValue = valor1.getText().toString();
valor = Integer.parseInt(myEditValue); <<<<Line 20
}
}
logcat的
05-08 21:02:10.023: W/dalvikvm(6074): threadid=1: thread exiting with uncaught exception (group=0x40020578)
05-08 21:02:10.039: E/AndroidRuntime(6074): FATAL EXCEPTION: main
05-08 21:02:10.039: E/AndroidRuntime(6074): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dc.maker/com.dc.maker.PopupValores}: java.lang.NumberFormatException: unable to parse '' as integer
05-08 21:02:10.039: E/AndroidRuntime(6074): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
05-08 21:02:10.039: E/AndroidRuntime(6074): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
05-08 21:02:10.039: E/AndroidRuntime(6074): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-08 21:02:10.039: E/AndroidRuntime(6074): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
05-08 21:02:10.039: E/AndroidRuntime(6074): at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 21:02:10.039: E/AndroidRuntime(6074): at android.os.Looper.loop(Looper.java:130)
05-08 21:02:10.039: E/AndroidRuntime(6074): at android.app.ActivityThread.main(ActivityThread.java:3687)
05-08 21:02:10.039: E/AndroidRuntime(6074): at java.lang.reflect.Method.invokeNative(Native Method)
05-08 21:02:10.039: E/AndroidRuntime(6074): at java.lang.reflect.Method.invoke(Method.java:507)
05-08 21:02:10.039: E/AndroidRuntime(6074): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
05-08 21:02:10.039: E/AndroidRuntime(6074): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
05-08 21:02:10.039: E/AndroidRuntime(6074): at dalvik.system.NativeStart.main(Native Method)
05-08 21:02:10.039: E/AndroidRuntime(6074): Caused by: java.lang.NumberFormatException: unable to parse '' as integer
05-08 21:02:10.039: E/AndroidRuntime(6074): at java.lang.Integer.parseInt(Integer.java:362)
05-08 21:02:10.039: E/AndroidRuntime(6074): at java.lang.Integer.parseInt(Integer.java:332)
05-08 21:02:10.039: E/AndroidRuntime(6074): at com.popupclass.PopupValores.onCreate(PopupValores.java:20)
05-08 21:02:10.039: E/AndroidRuntime(6074): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-08 21:02:10.039: E/AndroidRuntime(6074): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
05-08 21:02:10.039: E/AndroidRuntime(6074): ... 11 more
我正在尝试从EditText中获取一个int,然后在其他类中使用它来确定某个值。有人能告诉我我做错了吗?
由于
答案 0 :(得分:3)
例外是:
Java.lang.NumberFormatException: unable to parse '' as integer
这只是因为editbox1字段中没有值。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popupvalores);
valor1 = (EditText) findViewById (R.id.editText1);
myEditValue = valor1.getText().toString();
Log.debug("logtag", myEditValue); // Here you can see the output.
try {
valor = Integer.parseInt(myEditValue);
}
catch(Exception e) {
Log.e("logtag", "Exception: " + e.toString());
}
}
答案 1 :(得分:1)
您尝试过早访问valor1
,valor1
目前是一个空字符串。您必须在用户有机会定义某些内容后处理该值。
尝试添加如下按钮:
(Button) button = (Button) findViewByID(R.id.button1);
button.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
String temp = valor1.getText().toString();
if(temp.isEmpty() == false) {
valor = Integer.parseInt(temp);
Log.v("SO", "Valor = " + valor);
}
}
}
答案 2 :(得分:1)
代码试图将EditText'中的空字符串解析为int,这会导致抛出异常。
您的示例代码也缺少关闭的LinearLayout标记。
答案 3 :(得分:1)
使用正则表达式......下方:
public class PopupValores extends Activity {
EditText valor1;
String myEditValue;
public static int valor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popupvalores);
valor1 = (EditText) findViewById (R.id.editText1);
myEditValue = valor1.getText().toString();
valor = Integer.parseInt(myEditValue.replaceAll("[\\D]",""));
}
}
答案 4 :(得分:0)
上面的代码肯定会导致问题,因为您在Integer.parseInt(myEditValue)
中onCreate()
,在创建活动时,您的EditText尚未填充任何文本(并且您没有在其XML定义中提供默认值),因此它是一个空字符串,Integer.parseInt(emptyString)
将抛出NumberFormatException
。
执行此操作的正确方法是将解析EditText值的代码移动到某处,以响应用户事件,或简单地try...catch
Integer.parseInt()
。
最安全的方法始终是try...catch
Integer.parseInt()
,因为我们应该永远不要相信用户的输入。