java - 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();
}
解决方案
我的猜测是有人下载了您的应用程序的 .APK,而不是从 Play 商店中获取 .AAB。发生这种情况时,应用程序可能会立即崩溃,因为 .APK 不包含特定于用户设备的资源(即,使用资源限定符指定的资源)。
推荐阅读
- c++ - C++ 中的 OpenCV 图像透视变换
- java - 如何摆脱错误:“java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 错误”
- javascript - 使用 react 和 Django REST API 上传多个文件
- javascript - 如何使用 PHP 将动态 HTML 元素插入数据库?
- git - git pull origin master --allow-unrelated-histories - '/usr/share/nano/git.nanorc' 中的错误
- objective-c - 将下标函数从 Objective C 转换为 Swift
- java - Amazon Kinesis Firehose 到 S3
- protocol-buffers - grpc-web 使用通配符编译 proto 文件
- java - 在Android中进行数据绑定时替换片段时工具栏消失
- r - 如何使用 igraph 近似匹配领结图?