Android - Почему вызов этой функции напрямую вместо onClick вызывает исключение NullPointerException?
Я пытаюсь интегрировать Sinch Android SDK в свой проект, и я хотел удалить кнопку "Вход в систему", то есть так, чтобы действие переключалось на следующее действие без необходимости нажимать кнопку "Вход". Для этого я удалил код для setOnClickListener
для mLoginButton
и вместо этого прямо называется 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
вместо?
Изменить: LoginActivity.java
2 ответа
getSinchServiceInterface()
Метод возвращает ноль, поэтому вы получаете исключение нулевого указателя.
Ранее loginCliked()
метод вызывался после того, как кнопка была включена в onServiceConnected
метод.
попробуйте позвонить loginClicked()
метод в onServiceConnected()
метод или использовать некоторую задержку.
Мое решение:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
loginClicked();
}
}, 4000);