Не удается получить текст из EditText

#java #android #xml

#java #Android #xml

Вопрос:

     public class screen2 extends Activity {

        @Override
        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.screen2);

            final Button button1 = (Button)findViewById(R.id.button1);        
            button1.setOnClickListener(new View.OnClickListener() {
                 public void onClick(View v) {

                    //AInteger.parseInt(string)
                    System.out.println("1");
                    EditText et = (EditText)findViewById(R.id.editText1);
                    System.out.println("2");
                    int zipCode =  Integer.parseInt(et.getText().toString());
                    System.out.println("3");
                    System.out.println(zipCode);

                    System.out.println("dude...5");
                 }
            });
        }        
   }
  

Этот код показывает ошибку в logcat :

     11-13 19:58:06.806: W/KeyCharacterMap(281): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-13 19:58:09.471: I/System.out(281): 1
11-13 19:58:09.471: I/System.out(281): 2
11-13 19:58:09.477: D/AndroidRuntime(281): Shutting down VM
11-13 19:58:09.477: W/dalvikvm(281): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-13 19:58:09.527: E/AndroidRuntime(281): FATAL EXCEPTION: main
11-13 19:58:09.527: E/AndroidRuntime(281): java.lang.NullPointerException
11-13 19:58:09.527: E/AndroidRuntime(281):  at com.example.andtwi.screen2$1.onClick(screen2.java:23)
11-13 19:58:09.527: E/AndroidRuntime(281):  at android.view.View.performClick(View.java:2408)
11-13 19:58:09.527: E/AndroidRuntime(281):  at android.view.View$PerformClick.run(View.java:8816)
11-13 19:58:09.527: E/AndroidRuntime(281):  at android.os.Handler.handleCallback(Handler.java:587)
11-13 19:58:09.527: E/AndroidRuntime(281):  at android.os.Handler.dispatchMessage(Handler.java:92)
11-13 19:58:09.527: E/AndroidRuntime(281):  at android.os.Looper.loop(Looper.java:123)
11-13 19:58:09.527: E/AndroidRuntime(281):  at android.app.ActivityThread.main(ActivityThread.java:4627)
11-13 19:58:09.527: E/AndroidRuntime(281):  at java.lang.reflect.Method.invokeNative(Native Method)
11-13 19:58:09.527: E/AndroidRuntime(281):  at java.lang.reflect.Method.invoke(Method.java:521)
11-13 19:58:09.527: E/AndroidRuntime(281):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-13 19:58:09.527: E/AndroidRuntime(281):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-13 19:58:09.527: E/AndroidRuntime(281):  at dalvik.system.NativeStart.main(Native Method)
  

Хотя это выглядит как исключение с нулевым указателем, я думаю, что я делаю это в точности так, как я нашел на форумах. Вот также код моего связанного 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="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@ id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Enter Zipcode" />

    <EditText
        android:id="@ id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:maxLength="5" >

        <requestFocus />
    </EditText>

    <Button
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@ id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Get movies from Flixster" />

</LinearLayout>
  

При этом код также прерывается :

 int zipCode =  Integer.parseInt(et.getText().toString());
  

Комментарии:

1. Вы убедились, что et не равно null?

2. нет .. я этого не делал. Как я могу это сделать.

3. Проблема решена… я не имею большого представления об отладчике.. попробую это в следующий раз. Спасибо

Ответ №1:

Попробуйте это:

 Button button1 = (Button)findViewById(R.id.button1);  
EditText et = (EditText)findViewById(R.id.editText1);

button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                System.out.println("1");                
                System.out.println("2");
                String zipCode = et.getText().toString();
                System.out.println("3");
                System.out.println(zipCode); 
            }
}
  

Я думаю, вам не нужно писать String zipCode = (String)et.getText().toString(); туда, поскольку он уже возвращает String объект.

И надеюсь, вы не пропустите включить setContentView(R.layout.your_xml_file); перед объявлением Button и EditText .

Редактировать 1:

Похоже, у вас не возникает проблем с

int zipCode=Integer.parseInt(et.getText().toString()); там.Попробуйте это с приведенной выше модификацией кода.

Возможно, вы получаете исключение нулевого указателя, потому что вы получаете String s=et.getText().toString() значение null.Пожалуйста, проверьте его на значение null перед приведением к int .

Кнопка button1 = (Button)findViewById(R.id.button1);
EditText et = (EditText)findViewById(R.id.editText1);

 button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                System.out.println("1");                
                System.out.println("2");
                String check = et.getText().toString();
                int zipCode=0;
                if(!check.equals(""))
                    zipCode=Integer.parseInt(check);
                System.out.println("3");
                System.out.println(zipCode); 
            }
}
  

Комментарии:

1. пожалуйста, проверьте отредактированный код. Если вы напечатаете 0, то вы получаете null из самого вашего edittext.

Ответ №2:

Не могли бы вы опубликовать свой onCreate метод, а также строку 23 отдельно? Наиболее вероятная проблема заключается в том, что вы пренебрегаете вызовом, setContentView и именно поэтому findViewById возвращает null.

Комментарии:

1. Попробуйте очистить свой проект. В Eclipse выберите Project -> Очистить

2. это сработало.. все больше и больше я работаю над Eclipse … все больше и больше я расстраиваюсь.. «очистить содержимое проекта время загрузки эмулятора».. собирается ли Google таким образом вывести Android на лидирующие позиции?