проверить поле edittext внутри alerttdialog - PullRequest
0 голосов
/ 22 сентября 2011

Я использую эту функцию для вставки в базу данных. Я хотел бы проверить входные данные из двух полей edittext. Всякий раз, когда я нажимаю кнопку ОК без ввода каких-либо данных, программа вылетает. Я также пытался напечатать значения, но они не отображались в logcat. Я делаю что-то не так?

    private void add() {
    LayoutInflater inflater=LayoutInflater.from(this);
    final View addView=inflater.inflate(R.layout.add_country, null);

    new AlertDialog.Builder(this)
        .setTitle("Add new country/year")
        .setView(addView)
        .setPositiveButton("OK", 
                new DialogInterface.OnClickListener() {
                                                public void onClickDialogInterface                                                       dialog,int whichButton) {
                        /* Read alert input */
                        EditText editCountry =(EditText)addView.findViewById(R.id.editCountry);
                        String country = editCountry.getText().toString();
                        EditText editYear =(EditText)addView.findViewById(R.id.editYear);
                        int year = Integer.parseInt( editYear.getText().toString() );
                        if(editCountry.getText().toString().trim().length()>0 && editYear.getText().toString().trim().length()>0){
                            /* Open DB and add new entry */
                            db.open(); 
                            db.insertEntry(country,year);

                            /* Create new cursor to update list. Must be possible to handle
                             * in a better way. */
                            entryCursor = db.fetchAllEntries();    // all country/year pairs                            
                            adapter = new SimpleCursorAdapter(CountryEditor.this,
                                    R.layout.country_row,entryCursor,
                                    new String[] {"country", "year"},
                                    new int[] {R.id.country, R.id.year});
                            setListAdapter(adapter);
                            db.close();
                        }
                        else{
                            Toast.makeText(CountryEditor.this,
                                    "You need to enter Country AND Year.", Toast.LENGTH_LONG).show();
                        }
                    }
                })
        .setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int whichButton) {
                        // ignore, just dismiss
                    }
                })
        .show();
}

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

editCountry.getText () равно nullstring? nullponterexception

1 голос
/ 22 сентября 2011

Вы вызываете editBlah.getText (). ToString (), который может возвращать "";

При синтаксическом анализе этого целого числа будет выдано исключение.также может быть, если вы вызовете .getText () для представления, которое инициализируется нулем (т. е. вы неправильно указали идентификатор нужного идентификатора), будет выдано исключение NullPointerException. Без Stacktrace вы не сможетескажите, что - попробуйте опубликовать свою трассировку стека с вопросом, где это возможно ).

Ваш вопрос верен - вам нужно подтвердить ввод, который вы получаете: то есть:

int year = Integer.parseInt( editYear.getText().toString() );

должно быть:

if(editYear.getText().toString().equalsIgnoreCase("")) {
    // Cannot parse into an int therefore perform some action which will notify the 
    // user they haven't entered the correct value.
}

Или даже следующее, если вы уже собираетесь проверять свои значения int:

int year = Integer.parseInt( editYear.getText().toString().equalsIgnoreCase("") ? 
        "-1" : editYear.getText().toString());
...