Android中的String和EditText函数问题

时间:2011-02-07 19:55:27

标签: java android string conditional android-edittext

我试图通过检查EditText字段中的用户输入来触发条件。当我将EditText中的String打印到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());

此代码始终显示“缺少驱动程序ID!”。我试过这些其他条件,没有成功:

(((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 个答案:

答案 0 :(得分:1)

我发布此评论作为评论,但它太长了......

我不认为问题是你认为的那样。但是,我不能说问题是什么,因为你还没有清楚你是如何检测成功和/或失败的。

让我们首先澄清诊断代码,以消除任何可能的歧义。我建议你改变这个:

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

这将消除日志中关于文本是否真的丢失的任何可能的歧义。 (它还使代码更易读。)

答案 1 :(得分:0)

问题实际上是Dialog对象。条件是好的。在onClick方法的开头,我添加了一个调用:

 removeDialog(DIALOG_FAIL);

这迫使Android在下次调用时重建Dialog。

编辑:为了将来参考,使用onPrepareDialog()有更优雅的方法,但这个解决方案对我来说更容易。