Проблемы с функцией String и EditText в Android - PullRequest
1 голос
/ 07 февраля 2011

Я пытаюсь вызвать условие, проверив ввод данных пользователем в поле EditText. Когда я печатаю String из EditText в logcat, я вижу изменение данных, но функции String, проверяющие значения, всегда возвращают false.

if(((EditText)findViewById(R.id.drv_in)).getText().toString().equals("")) {
    TX_FAIL_TEXT = "Missing Driver ID!";
}
Log.e("SMSDRVERR", ((EditText)findViewById(R.id.drv_in)).getText().toString());

этот код всегда отображает «Отсутствует идентификатор водителя!». я пробовал эти другие условия, но безуспешно:

(((EditText)findViewById(R.id.drv_in)).getText().toString().isEmpty())  //does not compile, says cannot find symbol, but the function is in the Android documentation
(((EditText)findViewById(R.id.drv_in)).getText().toString().length() < 1) //returns false, even for strings of length > 1

Я могу подтвердить, что данные действительно не равны нулю, посмотрев на logcat и увидев, что мои данные отображаются в журналах. что не так с условным?

это не даст сбоя, если вы не вставите данные при первой передаче. Если первая передача не удалась, все последующие передачи не пройдены, независимо от того, изменили вы данные или нет. кроме того, если он пройдет первую передачу, он пройдет все последующие передачи.

Кроме того, в полном коде ниже размещены другие условия, которые также оцениваются только при первом нажатии кнопки.

transmit.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //data validation
        ///////////////////////
        boolean valid = true;
        if(((EditText)findViewById(R.id.drv_in)).getText().toString().equals("")) {
            TX_FAIL_TEXT = "Missing Driver ID!";
            showDialog(DIALOG_FAIL);
            TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default
            valid = false;
        }
        Log.e("SMSDRVERR", ((EditText)findViewById(R.id.drv_in)).getText().toString());
        if(custSpn.getSelectedItemPosition() == 0) {
            TX_FAIL_TEXT = "Missing Customer Selection!";
            showDialog(DIALOG_FAIL);
            TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default
            valid = false;
        }
        if(prdSpn.getSelectedItemPosition() == 0) {
            TX_FAIL_TEXT = "Missing Product Selection!";
            showDialog(DIALOG_FAIL);
            TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default
            valid = false;
        }
        if(((Cursor)prdSpn.getItemAtPosition(prdSpn.getSelectedItemPosition())).getString(prdSpn.getSelectedItemPosition()).contains("CAR") || 
                ((Cursor)prdSpn.getItemAtPosition(prdSpn.getSelectedItemPosition())).getString(prdSpn.getSelectedItemPosition()).contains("AUTO") ||
                ((Cursor)prdSpn.getItemAtPosition(prdSpn.getSelectedItemPosition())).getString(prdSpn.getSelectedItemPosition()).contains("TRUCK")
            ) {
            //must have make, license# and 1vin
            if(((EditText)findViewById(R.id.make_in)).getText().toString().equals("")) {
                TX_FAIL_TEXT = "Vehicle Entry:\n Missing Make/Model!";
                showDialog(DIALOG_FAIL);
                TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default
                valid = false;
            }
            if(((EditText)findViewById(R.id.tag_in)).getText().toString().equals("")) {
                TX_FAIL_TEXT = "Vehicle Entry:\n Missing Tag Number!";
                showDialog(DIALOG_FAIL);
                TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default
                valid = false;
            }
            if(((EditText)findViewById(R.id.vin1_in)).getText().toString().equals("") ||
                    ((EditText)findViewById(R.id.vin2_in)).getText().toString().equals("") ||
                    ((EditText)findViewById(R.id.vin3_in)).getText().toString().equals("") ||
                    ((EditText)findViewById(R.id.vin4_in)).getText().toString().equals("") ||
                    ((EditText)findViewById(R.id.vin5_in)).getText().toString().equals("") ||
                    ((EditText)findViewById(R.id.vin6_in)).getText().toString().equals("") ||
                    ((EditText)findViewById(R.id.vin7_in)).getText().toString().equals("") ||
                    ((EditText)findViewById(R.id.vin8_in)).getText().toString().equals("")
                ) {
                TX_FAIL_TEXT = "Vehicle Entry:\n Missing VIN Number!";
                showDialog(DIALOG_FAIL);
                TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default
                valid = false;
            }
        }
        //Log.e("smsDRVERR",((EditText)smsActivity.this.findViewById(R.id.drv_in)).getText().toString());
        //begin transmission
        ///////////////////////
        if(valid) {
            showDialog(DIALOG_TX_PROGRESS);
            Thread t = new Thread(txRunnable);
            t.start();
        } else {
            //do things if needed

        }
    }

Ответы [ 2 ]

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

Я бы опубликовал это как комментарий, но это было бы слишком долго ...

Я не думаю, что проблема в том, что вы думаете. Однако я не могу сказать, в чем проблема , потому что вы не совсем понимаете, как вы обнаруживаете успех или неудачу.

Давайте начнем с уточнения диагностического кода, чтобы устранить возможные двусмысленности. Я бы посоветовал вам изменить это:

if(((EditText)findViewById(R.id.drv_in)).getText().toString().equals("")) {
    TX_FAIL_TEXT = "Missing Driver ID!";
}
Log.e("SMSDRVERR", ((EditText)findViewById(R.id.drv_in)).getText().toString());

до:

final String drv = (EditText)findViewById(R.id.drv_in)).getText().toString();
if(drv.equals("") {
    TX_FAIL_TEXT = "Missing Driver ID!";
    Log.e("SMSDRVERR", "Missing ID " + drv);
}
else {
    Log.e("SMSDRVERR", "Found ID" + drv);
}

Это устранит любую возможную двусмысленность в журнале о том, действительно ли отсутствовал текст. (Это также делает код более читабельным.)

0 голосов
/ 07 февраля 2011

проблема была на самом деле с объектами Dialog.условно в порядке.в начале метода onClick я добавил вызов:

 removeDialog(DIALOG_FAIL);

, что заставляет Android перестроить диалог при следующем вызове.

РЕДАКТИРОВАТЬ: для дальнейшего использования тамэто более элегантный способ сделать это с помощью onPrepareDialog (), но это решение было проще для меня.

...