Получить номера из EditText

Я знаю, что его спрашивали несколько раз, но я стараюсь все, что нашел, не повезло. У меня все еще есть ошибка. Вот мой код.

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> 

Ява

 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 

Я пытаюсь получить int из EditText, а затем использовать его в другом классе, чтобы определить значение чего-то. Может ли кто-нибудь сказать мне, что я делаю неправильно?

благодаря

Исключением является:

 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()); } } 

Код пытается разобрать пустую строку из EditText '' как int, из-за чего возникает исключение.

В вашем примере кода также отсутствует закрывающий тег LinearLayout.

Вы пытаетесь получить доступ к 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); } } } 

Используйте регулярное выражение … ниже:

 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]","")); } 

}

Ваш код выше определенно вызовет проблему, потому что вы сделали Integer.parseInt(myEditValue) в onCreate() , во время создания вашей активности ваш EditText еще не заполнен никаким текстом (и вы не указали значение по умолчанию В его определении XML), поэтому это пустая строка, а Integer.parseInt(emptyString) будет NumberFormatException .

Правильный способ сделать это – это перемещение кода, обрабатывающего значение EditText, где-нибудь, где в ответ на пользовательские события, или просто try...catch Integer.parseInt() .

Самый безопасный способ – всегда try...catch Integer.parseInt() , потому что мы не должны доверять пользователю .