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);
Другие вопросы по тегам