Android-диалог с edittext () продолжает возвращать исключение NULL - PullRequest
0 голосов
/ 28 февраля 2011

Я пытаюсь создать простое диалоговое окно, чтобы позволить моему пользователю создать нового пользователя. У меня есть макет так, как мне нужно, но по какой-то причине, когда я нажимаю кнопку «Создать», возникает исключение. Я пробовал разные способы сделать это, но я должен что-то упустить. Я сейчас на второй день этой ошибки, и у меня все нет вариантов. Я когда-нибудь дважды переписывал код и подошел с зубной расческой.

вот что у меня есть:

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

    final HttpClient httpclient = new DefaultHttpClient();

    //new user button, work in progress
    Button newuser = (Button) findViewById(R.id.new_user);
    newuser.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            final Dialog createU = new Dialog(MainActivity.this);



            createU.setContentView(R.layout.newuser);
            createU.setTitle("Create User");

            Button create = (Button) createU.findViewById(R.id.createUsr);
            Button cancel = (Button) createU.findViewById(R.id.cancel);



            create.setOnClickListener(new View.OnClickListener() {//creates the user

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    String usr = null, pass = null;
                    EditText userU = (EditText) findViewById(R.id.createUsr);
                    EditText passU = (EditText) findViewById(R.id.cancel);

                    if(userU.getText()!= null){//throws ERROR/AndroidRuntime(9937): java.lang.NullPointerException

                        usr = userU.getText().toString();
                    }
                    if(passU.getText()!=null){
                        pass = passU.getText().toString();
                    }


                    Toast toast = Toast.makeText(getApplicationContext(), "User: " + usr + ", Pass: " + pass, Toast.LENGTH_SHORT);
                    toast.show();
                }
            });
            cancel.setOnClickListener(new View.OnClickListener() {//closes dialog

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    createU.hide();
                }
            });
            createU.show();
        }
    });
   }
 }
<?xml version="1.0" encoding="utf-8"?>

<EditText android:id="@+id/usrTxt" android:layout_height="wrap_content"
    android:layout_width="match_parent" android:maxLines="1" android:hint="Username"
    android:text="2"></EditText>
<EditText android:id="@+id/pasTxt" android:layout_height="wrap_content"
    android:layout_width="match_parent" android:layout_below="@id/usrTxt"
    android:inputType="textPassword" android:maxLines="1" android:hint="Password"
    android:text="2"></EditText>
<Button android:layout_height="wrap_content"
    android:layout_alignParentLeft="true" android:layout_width="wrap_content"
    android:layout_below="@+id/pasTxt" android:text="Create" android:id="@+id/createUsr"></Button>
<Button android:layout_height="wrap_content"
    android:layout_width="wrap_content" android:id="@+id/cancel"
    android:layout_alignParentRight="true" android:text="Cencel"
    android:layout_below="@+id/pasTxt"></Button>

Ответы [ 3 ]

1 голос
/ 28 февраля 2011

Не инициализировать строки с нулевыми значениями

избегать String usr = null, pass = null;. Надеюсь, что это поможет.

Обновление:

Измените вышеприведенную строку, вызывая ошибку как

if (!userU.getText().toString().equals("")) {

Update2

Измените строки инициализации Edittext, как показано ниже

  EditText userU = (EditText) findViewById(R.id.usrTxt);                     
  EditText passU = (EditText) findViewById(R.id.pasTxt); 
0 голосов
/ 13 декабря 2011

Вы ссылаетесь на неправильный ресурс.

findViewById(R.id.usrTxt);               
findViewById(R.id.pasTxt);

ресурс из XML-файла.

Вы должны обратиться к ресурсу диалога.

dialog.findViewById(R.id.usrTxt);               
dialog.findViewById(R.id.pasTxt);
0 голосов
/ 28 февраля 2011

Проблема, я думаю, заключается в том, что эти строки в onClick(View v):

EditText userU = (EditText) findViewById(R.id.createUsr);
EditText passU = (EditText) findViewById(R.id.cancel);

Они ищут в вашем основном макете эти представления и не находят их.Попробуйте изменить их на:

EditText userU = (EditText) createU.findViewById(R.id.createUsr);
EditText passU = (EditText) createU.findViewById(R.id.cancel);

, и исключение NullPointerException должно исчезнуть.

Но этот код немного странный.OnClickListener уже присоединен к кнопке R.id.createUsr, так что именно это передается как View to onClick.Там нет причин, чтобы найти его снова.Кроме того, это кнопка, а не EditText;Вы уверены, что хотите протестировать это представление?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...