目录
1.Can't toast on a thread that has not called Looper.prepare()
3.java.lang.BootstrapMethodError: Exception from call site #4 bootstrap method
4.java.lang.SecurityException: Permission denied (missing INTERNET permission?)
5.android.os.NetworkOnMainThreadException
8.Error : Program type already present: android.support.design.widget.CoordinatorLayout$
9.android.view.InflateException: Binary XML file line # : Error inflating class
10.CoordinatorLayout+TableLayout+ViewPager不能自动折叠的问题
1.Can't toast on a thread that has not called Looper.prepare()
1)原因
Android是不能直接在子线程中弹出Toast的, 如果在一个线程中没有调用Looper.prepare(),就不能在该线程中创建Toast。
2)解决方式
先调用
Looper.prepare(),
再调用Toast.makeText().show(),
最后再调用Looper.loop()。如下所示:
public class ToastUtils { static Toast toast = null; public static void show(Context context, String text) { try { if(toast!=null){ toast.setText(text); }else{ toast= Toast.makeText(context, text, Toast.LENGTH_SHORT); } toast.show(); } catch (Exception e) { //解决在子线程中调用Toast的异常情况处理 Looper.prepare(); Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); Looper.loop(); } } }
2.android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
1)原因
在子线程中更新UI导致的问题
2)解决方式
使用Handler或者runOnUiThread()或者AsyncTask。
3.java.lang.BootstrapMethodError: Exception from call site #4 bootstrap method
1)原因
okhttp的版本导致
2)解决方式
将okhttp版本调低即可。
4.java.lang.SecurityException: Permission denied (missing INTERNET permission?)
1)原因
没有提供网络访问权限
2)解决方式
在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
5.android.os.NetworkOnMainThreadException
1)原因
主要是在主线程中访问网络
2)解决方式
创建一个子线程进行访问网络
6.W/System.err: Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
1) 原因
证书问题。
7.java.net.UnknownServiceException: CLEARTEXT communication XXX not permitted by network security policy 和java.io.IOException: Cleartext HTTP traffic to XXX not permitted
1)原因
这是Android http网络请求的问题,Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。
原文:https://blog.youkuaiyun.com/gengkui9897/article/details/82863966因此使用HttpUrlConnection进行http请求会出现以下异常
java.io.IOException: Cleartext HTTP traffic to XXX not permitted
使用OKHttp请求则出现
java.net.UnknownServiceException: CLEARTEXT communication XXX not permitted by network security policy
在Android系统的设备上,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响,同样地,如果应用嵌套了webview,webview也只能使用https请求。
2)解决方式
针对这个问题,有以下三种解决方法:
(1)APP改用https请求
(2)targetSdkVersion 降到27以下
(3)更改网络安全配置
前面两个方法容易理解和实现,具体说说第三种方法,更改网络安全配置。
1.在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
2.接着,在AndroidManifest.xml文件下的application标签增加以下属性:
<application ... android:networkSecurityConfig="@xml/network_security_config" ... />
完成,这个时候App就可以访问网络了。
8.Error : Program type already present: android.support.design.widget.CoordinatorLayout$
原因
解决方式
1)在build.gradle文件中把support报修改为27.1.1
implementation 'com.android.support:design:27.1.1'
2)在dependencies{}做相关的配置工作
dependencies{ configuration{ all*.exclude group:"com.android.support", module:"support-v13" } }
进行同步操作,如果Rebuild后还是存在这个问题,那就需要考虑下使用的三方依赖是否存在冲突。例如:constrain:constrain-layout 版本与design版本依赖冲突。( 版本过低也有可能会导致冲突的存在)
3)检查你gradle有关constrainllayou的冲突问题,使他们都升级为最新的版本,然后进行同步操作后就可以解决问题了 。
引用:https://blog.youkuaiyun.com/j_zcxf/article/details/80332861
9.android.view.InflateException: Binary XML file line # : Error inflating class
可能的原因如下所示:
1.XML中使用到得组件名称是否书写正确(包名+类名),可以使用crtl+鼠标点击看能不能跳转到该组件的定义的地方,可以的话就不是这个问题,如果不可以的话,就是这个问题
2.就是自定义的组件中的构造方法不正确
3.工程的编码问题:GBK与UTF-8
4.在多屏适配的时候,比如你在values-sw720文件夹中定义了dimens的一个尺寸,但是没有在values中定义相应的尺寸大小,然后在xml中使用了这个dimens尺寸,当你运行程序到720p(三星平板)的设备上是没有问题的,如果将程序跑在480的设备上,就会出现这种异常(原因是480设备可能会从values文件夹中查找尺寸,找不到出错),这个问题很难发现。所以在做屏幕适配工作的时候,一定要谨慎。
----------------------------
原文:https://blog.youkuaiyun.com/jiangwei0910410003/article/details/17039207
10.CoordinatorLayout+TableLayout+ViewPager不能自动折叠的问题
原因:
通过CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout框架实现滑动折叠功能,ViewPager包含两个Fragment横向滑动,集成后发现无论怎么样头部都不会自动折叠,经过了多次尝试发现是ViewPager包含的两个Fragment的问题,一个Fragment根布局是ScrollView,另一个是ListView,上面的折叠框架都不支持,需要把ScrollView变成NestedScrollView,ListView采用RecyclerView来代替。
滚动控件必须实现NestedScrollingChild接口(如RecyclerView,NestedScrollView),而没有实现该接口的滚动控件如ScrollView、WebView、ListView是全部都没有作用的。后面CollapsingToolbarLayout也同样遵循该规则。
CoordinateLayout需要配合支持嵌套滚动的控件才能直线折叠效果。
参考:
coordinatorLayout使用详解及注意事项,看完这篇完全可以开发5.0的高级特效了
CoordinatorLayout使用中的坑
---------------------
原文:https://blog.youkuaiyun.com/yu75567218/article/details/77879695