Android开发错误汇总

本文详细解析了Android开发中常见的十种错误,包括线程Toast显示问题、UI线程更新异常、网络访问权限缺失、主线程网络访问限制等,并提供了具体的解决策略,如调整线程准备、使用Handler或AsyncTask更新UI、添加网络权限、创建子线程访问网络等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.Can't toast on a thread that has not called Looper.prepare()

2.android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

3.java.lang.BootstrapMethodError: Exception from call site #4 bootstrap method

4.java.lang.SecurityException: Permission denied (missing INTERNET permission?)

5.android.os.NetworkOnMainThreadException

6.W/System.err: Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

7.java.net.UnknownServiceException: CLEARTEXT communication XXX not permitted by network security policy 和java.io.IOException: Cleartext HTTP traffic to XXX not permitted

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变成NestedScrollViewListView采用RecyclerView来代替。

    滚动控件必须实现NestedScrollingChild接口(如RecyclerView,NestedScrollView),而没有实现该接口的滚动控件如ScrollView、WebView、ListView是全部都没有作用的。后面CollapsingToolbarLayout也同样遵循该规则。

    CoordinateLayout需要配合支持嵌套滚动的控件才能直线折叠效果

参考:

      coordinatorLayout使用详解及注意事项,看完这篇完全可以开发5.0的高级特效了

      CoordinatorLayout使用中的坑
--------------------- 
原文:https://blog.youkuaiyun.com/yu75567218/article/details/77879695 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luckyliuqs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值