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

编辑:LoginActivity.java

getSinchServiceInterface() 方法返回 null,这就是您得到空指针异常的原因。

早期的 loginCliked() 方法是在 onServiceConnected 方法中启用按钮后调用的。

尝试在 onServiceConnected() 方法中调用 loginClicked() 方法或使用一些延迟。

我的解决方案:

final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
    @Override
    public void run() {
       loginClicked();
    }
}, 4000);