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

Posted

技术标签:

【中文标题】Android ViewBinding 有时会在绑定对象处返回 null,因此在尝试访问视图时出现空指针异常【英文标题】:Android ViewBinding sometimes return null at binding object so I got null pointer exception when try to access a view 【发布时间】:2021-11-01 09:43:14 【问题描述】:

来自 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();

    

【问题讨论】:

我也遇到了同样的问题,你找到解决办法了吗? 【参考方案1】:

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

【讨论】:

该应用程序有超过一千个活跃用户并定期使用该应用程序,但此错误发生/每周仅报告 5-6 次。我不确定你的回答是不是这个原因。

以上是关于Android ViewBinding 有时会在绑定对象处返回 null,因此在尝试访问视图时出现空指针异常的主要内容,如果未能解决你的问题,请参考以下文章

android ViewBinding

android ViewBinding

android ViewBinding

Android:DataBinding 和 ViewBinding 的区别

Android Studio 开启视图绑定 viewBinding

Android Studio 开启视图绑定 viewBinding