Java 从onClick()内部类访问程序数据

Java 从onClick()内部类访问程序数据,java,android,events,onclick,Java,Android,Events,Onclick,我试图从按钮的onClickListener实现中的onClick()方法访问EditText。代码如下: transmit.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //data validation /////////////////////// boolean valid = true; if(((Edit

我试图从按钮的onClickListener实现中的onClick()方法访问EditText。代码如下:

transmit.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //data validation
        ///////////////////////
        boolean valid = true;
        if(((EditText)findViewById(R.id.drv_in)).getText().toString() == "") {
            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());
        //begin transmission
        ///////////////////////
        if(valid) {
            showDialog(DIALOG_TX_PROGRESS);
            Thread t = new Thread(txRunnable);
            t.start();
        } else {
            //do things if needed

        }
    }
});
永远不会调用Log.e(不会显示在logcat中)。程序执行时就好像条件语句不存在一样。如何在onClick实现中正确引用布局项?我也试过以下几句话:

Log.e("smsDRVERR",((EditText)smsActivity.this.findViewById(R.id.drv_in)).getText().toString());
在这个问题中,我发现有人提到:


但这并不能解决问题。我缺少一些需要在这个内部类中引用这些项的内容,或者我的语法有点混乱。非常感谢您的帮助。

首先,是否调用了onClick方法?第二,不要使用
==
进行字符串比较;使用
.equals()
。(相等的字符串不一定是相同的对象,这就是
=
测试的对象。)

首先,是否调用了onClick方法?第二,不要使用
==
进行字符串比较;使用
.equals()
。(相等的字符串不一定是相同的对象,这就是
=
测试的对象。)

您没有正确比较
字符串

if(((EditText)findViewById(R.id.drv_in)).getText().toString() == "") {
正在检查对象是否相等,而您希望检查值是否相等。您应该使用:

if(((EditText)findViewById(R.id.drv_in)).getText().toString().equals("")) {
就我个人而言,我会将
getText
返回的值赋给
String
变量,而不是多次调用
getText

String myEditTextValue = (EditText)findViewById(R.id.drv_in)).getText().toString();
...
if ("".equals(myEditTextValue)) {

您没有正确比较
字符串

if(((EditText)findViewById(R.id.drv_in)).getText().toString() == "") {
正在检查对象是否相等,而您希望检查值是否相等。您应该使用:

if(((EditText)findViewById(R.id.drv_in)).getText().toString().equals("")) {
就我个人而言,我会将
getText
返回的值赋给
String
变量,而不是多次调用
getText

String myEditTextValue = (EditText)findViewById(R.id.drv_in)).getText().toString();
...
if ("".equals(myEditTextValue)) {

您的日志语句不在条件语句的范围内;它应该无条件地记录代码。您的日志记录或您的看法有问题。尝试一个简单的日志;在方法的一开始;一旦它工作起来,您就可以诊断出其他可能的错误。log语句不是问题所在,它可以处理不同的数据。这是我在发布之前使用的一个测试,以确保我可以绕过像这样的回答…在你上面“write Log.e不被调用”。现在您说“日志语句没有问题”。请提供准确的信息,并尽量减少代码以再现您的问题。换句话说,如果我将日志语句更改为:Log.e(“A”、“B”);正如上面所建议的,日志在logcat中的显示与它应该显示的完全相同。但是,对于上面的函数调用,程序的行为就像从未调用日志一样。没有错误,日志记录根本不会显示在logcat中;它应该无条件地记录代码。您的日志记录或您的看法有问题。尝试一个简单的日志;在方法的一开始;一旦它工作起来,您就可以诊断出其他可能的错误。log语句不是问题所在,它可以处理不同的数据。这是我在发布之前使用的一个测试,以确保我可以绕过像这样的回答…在你上面“write Log.e不被调用”。现在您说“日志语句没有问题”。请提供准确的信息,并尽量减少代码以再现您的问题。换句话说,如果我将日志语句更改为:Log.e(“A”、“B”);正如上面所建议的,日志在logcat中的显示与它应该显示的完全相同。但是,对于上面的函数调用,程序的行为就像从未调用日志一样。没有错误,并且日志根本不会显示在logcat中。这确实是实际的问题。Log.e()调用不起作用的原因是函数被传递了一个空值。谢谢你的回复。这确实是个问题。Log.e()调用不起作用的原因是函数被传递了一个空值。谢谢你的回复。