Java 当我取消对简单方法的注释时,应用程序崩溃
当用户登录未注释时,应用程序崩溃。我没有收到错误消息或它崩溃的任何指示。模拟器只是说登录屏幕已经停止Java 当我取消对简单方法的注释时,应用程序崩溃,java,android,Java,Android,当用户登录未注释时,应用程序崩溃。我没有收到错误消息或它崩溃的任何指示。模拟器只是说登录屏幕已经停止 我是Android开发新手,希望您能提供帮助。这是Java变量隐藏的问题。您的程序的重要部分包括: public class MainActivity extends AppCompatActivity implements OnEditorActionListener, OnClickListener{ private EditText username; private EditT
我是Android开发新手,希望您能提供帮助。这是Java变量隐藏的问题。您的程序的重要部分包括:
public class MainActivity extends AppCompatActivity
implements OnEditorActionListener, OnClickListener{
private EditText username;
private EditText password;
private Button login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText username = (EditText) findViewById(R.id.username);
EditText password = (EditText) findViewById(R.id.password);
Button login = (Button) findViewById(R.id.login);
username.setOnEditorActionListener(this);
password.setOnEditorActionListener(this);
login.setOnClickListener(this);
userLogin();
}
public void userLogin() {
String usernameString = username.getText().toString();
String passwordString = password.getText().toString();
}
@Override
public void onClick(View v) {
}
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
return false;
}
}
再创造
问题是,您在onCreate中使用的用户名和密码变量与您在类级别声明的不同。因此,当您调用userLogin时,您将得到一个NullPointerException,因为实例级username变量从未初始化
如果将onCreate更改为如下所示:
// these are local variables
EditText username = (EditText) findViewById(R.id.username);
EditText password = (EditText) findViewById(R.id.password);
然后,您将不再拥有局部变量,一切都将正常工作。简单地说,您正在声明创建视图对象,例如EditText、Button两次:一次作为类的私有成员,另一次在onCreate方法中 要解决此问题,请在onCreate中分配用户名和其他视图对象,而不使用类名:
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
出现问题的原因是您正在将本地创建的视图对象引用到XML布局,但您的登录方法正在访问从未分配给的全局视图对象。我希望这有帮助
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
private EditText username;
private EditText password;
private Button login;
@Override protected void onCreate(Bundle savedInstanceState) {
//...
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
login = (Button) findViewById(R.id.login);