Java 从onClick()内部类访问程序数据
我试图从按钮的onClickListener实现中的onClick()方法访问EditText。代码如下: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
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()调用不起作用的原因是函数被传递了一个空值。谢谢你的回复。