首页 > 解决方案 > Android ViewBinding 有时会在绑定对象处返回 null,因此在尝试访问视图时出现空指针异常

问题描述

Firebase Crashlytics 的确切错误日志:

Fatal Exception: java.lang.NullPointerException: Attempt to read from field 'android.widget.TextView com.schonell.databinding.ActivityLoginBinding.errorMessageTV' on a null object reference
       at com.schonell.ui.activity.LoginActivity.showErrorMessage(LoginActivity.java:297)
       at com.schonell.ui.activity.LoginActivity.access$400(LoginActivity.java:59)
       at com.schonell.ui.activity.LoginActivity$2.onFailure(LoginActivity.java:286)
       at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$2.run(ExecutorCallAdapterFactory.java:80)
       at android.os.Handler.handleCallback(Handler.java:938)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:246)
       at android.app.ActivityThread.main(ActivityThread.java:8587)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

我的实现如下和布局名称:activity_login.xml:

private ActivityLoginBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityLoginBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());
}

当从登录按钮操作返回错误消息时,我尝试在此视图 [errorMessageTV] 更新消息并收到上述错误。使用此方法更新的视图。

private void showErrorMessage(final String message) {
    binding.errorMessageTV.setVisibility(View.VISIBLE);
    binding.errorMessageTV.setText(message);
}

并从这里调用

public void activityLoginSubmit(View view) {

        hideErrorMessage();

        email = binding.emailEditText.getText().toString().trim();
        password = binding.passwordEditText.getText().toString().trim();

        if (TextUtils.isEmpty(email)) {
            showErrorMessage(context.getString(R.string.please_fill_in_all_required_fields));
            return;
        }
        if (TextUtils.isEmpty(password)) {
            showErrorMessage(context.getString(R.string.please_fill_in_all_required_fields));
            return;
        }



        submitRemoteLogin();

    }

标签: javaandroidnullpointerexception

解决方案


我的猜测是有人下载了您的应用程序的 .APK,而不是从 Play 商店中获取 .AAB。发生这种情况时,应用程序可能会立即崩溃,因为 .APK 不包含特定于用户设备的资源(即,使用资源限定符指定的资源)。


推荐阅读