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:DataBinding 和 ViewBinding 的区别