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