Java 无法在onClick方法内输出EditText元素的内容
我在Java 无法在onClick方法内输出EditText元素的内容,java,android,Java,Android,我在androidstudio或Java开发应用程序方面相对较新,最近遇到了一个我无法解决的问题。现在,我所要做的就是在点击按钮后输出编辑文本字段的内容 因为我以后很可能会在活动中添加更多按钮,所以我认为使用一个通用的onClick会更方便,在switch语句中可以分离不同的按钮操作 下面是一个工作示例,其中onClickListener不使用通用的onClick方法: package com.example.user.myapp; import android.app.Activity; i
androidstudio
或Java
开发应用程序方面相对较新,最近遇到了一个我无法解决的问题。现在,我所要做的就是在点击按钮后输出编辑文本
字段的内容
因为我以后很可能会在活动中添加更多按钮,所以我认为使用一个通用的onClick
会更方便,在switch
语句中可以分离不同的按钮操作
下面是一个工作示例,其中onClickListener
不使用通用的onClick
方法:
package com.example.user.myapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText testText;
private Button testButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialize UI elements
final EditText testText = (EditText) findViewById(R.id.testText);
testButton = (Button) findViewById(R.id.testButton);
// set onClick listener
testButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// it will print the content of testText as long as the "testText" variable is declared as final
System.out.println(testText.getText().toString().trim());
}
});
}
}
现在,如果我尝试使用通用的onClick
方法,我会突然收到以下错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.text.Editable android.widget.EditText.getText()”
以下是导致上述错误的代码:
package com.example.user.myapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements View.OnClickListener {
private EditText testText;
private Button testButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialize the UI elements
EditText testText = (EditText) findViewById(R.id.testText);
Button testButton = (Button) findViewById(R.id.testButton);
// set onClick Listener
testButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.testButton:
// this will result in an error
System.out.println(testText.getText().toString().trim());
break;
default:
break;
}
}
我在这里缺少什么吗?在您定义的第二个代码中,您定义了两次testText
那就行了
包com.example.user.myapp
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText
public class MainActivity extends Activity implements View.OnClickListener {
private EditText testText;
private Button testButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialize the UI elements
testText = (EditText) findViewById(R.id.testText);
testButton = (Button) findViewById(R.id.testButton);
// set onClick Listener
testButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.testButton:
// this will result in an error
System.out.println(testText.getText().toString().trim());
break;
default:
break;
}
}
在第二个代码中,您已经定义了两次testText
那就行了
包com.example.user.myapp
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText
public class MainActivity extends Activity implements View.OnClickListener {
private EditText testText;
private Button testButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialize the UI elements
testText = (EditText) findViewById(R.id.testText);
testButton = (Button) findViewById(R.id.testButton);
// set onClick Listener
testButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.testButton:
// this will result in an error
System.out.println(testText.getText().toString().trim());
break;
default:
break;
}
}
全局编辑文本:
private EditText testText;
在onCreate()中获取视图:
在onClick中使用它:
System.out.println(testText.getText().toString().trim());
全局编辑文本:
private EditText testText;
在onCreate()中获取视图:
在onClick中使用它:
System.out.println(testText.getText().toString().trim());
您从不初始化私有EditText testText代码>,因为在以下调用中使用了局部变量,而不是引用类字段:
final EditText testText = (EditText) findViewById(R.id.testText);
onClick(视图v)
是实现OnClickListener
接口的匿名类方法,该方法引用未初始化的字段变量testText
要解决此问题,请在调用findViewById()
之前删除变量的类型声明:
您从不初始化私有EditText testText代码>,因为在以下调用中使用了局部变量,而不是引用类字段:
final EditText testText = (EditText) findViewById(R.id.testText);
onClick(视图v)
是实现OnClickListener
接口的匿名类方法,该方法引用未初始化的字段变量testText
要解决此问题,请在调用findViewById()
之前删除变量的类型声明:
您已经声明了EditText 2次,一次是全局性的,另一次是在onCreate方法内,当您在onCreate之外使用EditText时,您得到的是全局变量,它不是初始化的,这就是为什么会出现此错误。用这个,
public class MainActivity extends Activity implements View.OnClickListener {
private EditText testText;
private Button testButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialize the UI elements
testText = (EditText) findViewById(R.id.testText);
testButton = (Button) findViewById(R.id.testButton);
// set onClick Listener
testButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.testButton:
// this will result in an error
System.out.println(testText.getText().toString().trim());
break;
default:
break;
}
}
您已经声明了EditText 2次,一次是全局性的,另一次是在onCreate方法内,当您在onCreate之外使用EditText时,您得到的是全局变量,它不是初始化的,这就是为什么会出现此错误。用这个,
public class MainActivity extends Activity implements View.OnClickListener {
private EditText testText;
private Button testButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialize the UI elements
testText = (EditText) findViewById(R.id.testText);
testButton = (Button) findViewById(R.id.testButton);
// set onClick Listener
testButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.testButton:
// this will result in an error
System.out.println(testText.getText().toString().trim());
break;
default:
break;
}
}
共享您的布局?您定义EditText testText
twice使用全局变量或局部变量共享布局?您定义EditText testText
twice使用全局变量或局部变量只要可能,我会接受这个答案:)干杯!一旦有可能,我将接受这个答案:)干杯!