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;
}
}
Run Code Online (Sandbox Code Playgroud)
取消注释"userLogin()"时应用程序崩溃.我没有收到错误消息或任何迹象表明它崩溃的原因.模拟器只是说"登录屏幕已停止".
我是Android开发的新手,所以任何帮助都将不胜感激.
这是Java变量"阴影"的问题.您的计划的重点是:
// these are instance variables
private EditText username;
private EditText password;
Run Code Online (Sandbox Code Playgroud)
并在 onCreate()
// these are local variables
EditText username = (EditText) findViewById(R.id.username);
EditText password = (EditText) findViewById(R.id.password);
Run Code Online (Sandbox Code Playgroud)
问题是,username和password您使用的变量onCreate()是不同的,从你在类级别已经声明了的.因此,当您调用时,userLogin()您将得到一个,NullPointerException因为实例级username变量从未初始化.
如果你改变你onCreate()的样子:
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
Run Code Online (Sandbox Code Playgroud)
然后你将不再有局部变量,一切都应该工作得很好.