Android中各种Exception错误小结( 二 )

然后图片仍然是能够进行加载显示的 。发现只有链接地址是https的图片才会出现上面的错误 。而http请求反而不会出现异常 。
运行设备为:Android 10 API 29
解决方法:将Glide插件的版本进行了升级 , 该错误打印就没有了 。
原版本:
 implementation 'com.github.bumptech.glide:glide:4.10.0'新版本:
 implementation 'com.github.bumptech.glide:glide:4.14.2'问题得到了解决 。
2.3 RuntimeExceptionRuntimeException:运行时异常 。只有当程序运行到该行代码的时候 , 才会被触发的异常情况 。
问题1:
 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.xxx/com.xxx.xx.activity.login.XXXX}: java.lang.NullPointerException: Attempt to read from field 'androidx.camera.view.PreviewView com.xxx.xxx.databinding.XXXXXXXeBinding.previewView' on a null object reference完整错误通常如下:
 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.xxx/com.xxx.xx.activity.login.XXXX}: java.lang.NullPointerException: Attempt to read from field 'androidx.camera.view.PreviewView com.xxx.xxx.databinding.XXXXXXXeBinding.previewView' on a null object referenceat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3298)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3437)at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2041)at android.os.Handler.dispatchMessage(Handler.java:107)at android.os.Looper.loop(Looper.java:214)at android.app.ActivityThread.main(ActivityThread.java:7386)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980)解决:
通过Binding方式获取的PreviewView对象不存在 。我们布局中如果是存在该View , 但是仍然出现这个错误 。
那么只有一种情况 。就是viewBinding还没有来得及初始化之前 , 就调用了viewBinding的方法去获取PreviewView对象了 。就会出现上面的问题了 。
通常情况下 , 我们可能是在View初始化之前 , 调用了动态权限判断 , 而动态权限判断通过后就直接开启相机了 。
而在这个时候我们View还没有来得及binding获取 。
 
通过Binding 方法调用触发view绑定 , 也是有执行顺序和时间的 。
 
问题2:
运行时崩溃异常如下:
 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xx.xx/com.xxx.xx.xx.login.xxx}: java.lang.IllegalArgumentException: Provided camera selector unable to resolve a camera for the given use caseat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2671)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2732)at android.app.ActivityThread.-wrap12(ActivityThread.java)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:154)at android.app.ActivityThread.main(ActivityThread.java:6141)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802) Caused by: java.lang.IllegalArgumentException: Provided camera selector unable to resolve a camera for the given use caseat androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle(ProcessCameraProvider.java:470)at androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle(ProcessCameraProvider.java:360)关键内容为:Provided camera selector unable to resolve a camera for the given use case翻译后显示:提供的摄像机选择器无法解析给定用例的摄像机.
问题在于 , 我们使用CameraX的时候 , 设备主机没有找到摄像头 。通常手机是不会出现这个问题的 , 只是可能在其他Android主板系统中进行开发时 , 可能当前硬件还没有来得及配置上摄像头 , 而我们的app调用到了摄像头相关代码 。就会触发上面的错误了 。
而CameraX本身默认是会自动选择摄像头的 。但是我们定义了CameraSelector指定了摄像头 。而又找不到指定摄像头 , 就会出现这个错误了 。
解决:
上面的代码触发的时候 , 是在:


推荐阅读