Android - 为什么直接调用此函数而不是 onClick 会导致 NullPointerException?
Android - Why calling this function directly instead of onClick causes a NullPointerException?
我正在尝试将 Sinch Android SDK 集成到我的项目中,我想删除登录按钮,即 Activity 切换到下一个 activity 而无需用户单击登录按钮。为此,我为 mLoginButton
删除了 setOnClickListener
的代码,而是直接调用 loginClicked()
函数,该函数之前是从 onClick()
方法调用的。
但这会导致 NullPointerException: Attempt to invoke virtual method 'boolean com.example.yankee.cw.SinchService$SinchServiceInterface.isStarted()' on a null object reference
.
这些是我对代码所做的唯一更改:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
mLoginName = (EditText) findViewById(R.id.loginName);
mLoginButton = (Button) findViewById(R.id.loginButton);
mLoginButton.setEnabled(false);
// mLoginButton.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// loginClicked();
// }
// });
loginClicked();
}
之前是这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
mLoginName = (EditText) findViewById(R.id.loginName);
mLoginButton = (Button) findViewById(R.id.loginButton);
mLoginButton.setEnabled(false);
mLoginButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
loginClicked();
}
});
}
为什么这行不通,而是给出 NullPointerException
?
getSinchServiceInterface()
方法返回 null,这就是您得到空指针异常的原因。
早期的 loginCliked()
方法是在 onServiceConnected
方法中启用按钮后调用的。
尝试在 onServiceConnected()
方法中调用 loginClicked()
方法或使用一些延迟。
我的解决方案:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
loginClicked();
}
}, 4000);
我正在尝试将 Sinch Android SDK 集成到我的项目中,我想删除登录按钮,即 Activity 切换到下一个 activity 而无需用户单击登录按钮。为此,我为 mLoginButton
删除了 setOnClickListener
的代码,而是直接调用 loginClicked()
函数,该函数之前是从 onClick()
方法调用的。
但这会导致 NullPointerException: Attempt to invoke virtual method 'boolean com.example.yankee.cw.SinchService$SinchServiceInterface.isStarted()' on a null object reference
.
这些是我对代码所做的唯一更改:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
mLoginName = (EditText) findViewById(R.id.loginName);
mLoginButton = (Button) findViewById(R.id.loginButton);
mLoginButton.setEnabled(false);
// mLoginButton.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// loginClicked();
// }
// });
loginClicked();
}
之前是这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
mLoginName = (EditText) findViewById(R.id.loginName);
mLoginButton = (Button) findViewById(R.id.loginButton);
mLoginButton.setEnabled(false);
mLoginButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
loginClicked();
}
});
}
为什么这行不通,而是给出 NullPointerException
?
getSinchServiceInterface()
方法返回 null,这就是您得到空指针异常的原因。
早期的 loginCliked()
方法是在 onServiceConnected
方法中启用按钮后调用的。
尝试在 onServiceConnected()
方法中调用 loginClicked()
方法或使用一些延迟。
我的解决方案:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
loginClicked();
}
}, 4000);