浅记Android开发中遇到的bug合集

Android开发中遇到的bug合集

(针对自己开发过程中遇到的bug合集记录下来,会持续更新该文章,需要自取,共勉。)

文章目录

1.项目编译的过程中遇到"Task ‘assembleDebug’ not found in project ‘:app’."问题。

解决:(点击Build选择Select Build Variants把Debug模式选为Reslease重新编译,编译完成后再选回Debug)

2.使用adb install安装apk的时候,设备上已经安装过一个版本,再次安装的话,会安装失败,出现如下提示信息:INSTALL_FAILED_ALREADY_EXISTS

解决:这时只要在命令中添加-r即可覆盖安装:adb install -r 你的apk完整路径(温馨提示:打完命令后,直接把要安装的apk拖进命令行)

3.解决 另一个程序正在使用此文件,进程无法访问问题。

解决:打开资源管理器性能里面打开资源监视器,接着在在cpu中找有被占用的文件,点结束进程

4.打包APK不成功Caused by: java.lang.reflect.InvocationTargetException等问题。

解决:其原因是工具在打包时会读取 输出目录中的output.json 进行重用 output.json文件不符合预期的格式则会报出该异常处理方式为 删除输出目录中的output.json文件 一般在\app\release\output.json

5.okhttp请求失败:socket函数返回Too many open files问题。

(解决:在创建链接时,不要频繁创建OkHttpClient,应该把OkHttpClient创建后,缓存起来)

6.RxJava操作符学习笔记

详情:相关博文链接

7.Android 二级列表控件ExpandableListView 的简单使用 :

详情:相关博文链接

8.Android 二级列表控件ExpandableListView 中子项目嵌套listview,出现listview显示不全只显示一条问题。

导致原因:原理是如果两个具有滑动属性的控件相互嵌套的话,被嵌套的控件的高度会按最开始绑定的高度计算。
与ScrollView嵌套ListView一样会造成无法完全显示数据的问题一样。
解决:相关博文链接

9.ExpandableListView嵌套ExpandableListView子项高度问题。

解决:相关博文链接

10.ExpandableListView嵌套ExpandableListView做三级列表,二级列表中数据重复问题。

解决:因为又嵌套了一个ExpandableListView,所以会写两个ExpandableAdapter,解决办法是设置父adapter的getChildrenCount()的返回值为1

@Override
    public int getChildrenCount(int groupPosition) {
        return 1;
    }

11.dialog显示对话出现多余的白色背景,是由于使用dialog自带的样式而造成的。

解决:重写该样式,去除掉背景。

<style name="AsyncTaskDialog" parent="@android:Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:background">@android:color/transparent</item>
    </style>

12.常用透明度

详情:相关博文链接

13.开发中,报错:java.lang.IndexOutOfBoundsException: Index: 1, Size: 0问题。

问题:一般地,IndexOutOfBoundsException 索引越界异常,一般都是与数组、集合相关。
解决:建议在排错时,着重在这两方面的代码上。
1、java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
这里的size是0,但是index已经为1了,那么就是跳过了index=0,导致了这个报错。
这个bug的是因为,在add元素时,直接指定了index=1,跳过了index=0。应该加判断。
2、java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
这里Index: 0, Size: 0 大概有三种可能:
(1)取了空值
list集合没有添加非空校验,在取第一条数据时,由于list集合为空,直接就报错了
解决:list集合添加非空校验,再取值
(2)使用List的get()方法传参超过List的大小。
(3)使用List.add(int index, E element)方法时,index参数值大于等于集合大小,导致报错。
————————————————
详情:相关博文链接

14.编译过程中遇到java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs 此类问题。

解决:在尝试将另一个android project下的module导入当前的android project下后,总是无法运行起来,一直报以下错误,大致意思就是告诉你:“Manifest资源文件中有问题了,赶紧去瞧瞧吧”。
1.打开资源文件
2.点击下面的Merged Manifest
3.这时你会看到具体报错信息,修改掉即可

详情:相关博文链接

15.处理使用edittext控件时,进入页面自动弹出自带的软键盘问题。

解决:1、在xml文件中设置 cursorVisible 属性。

<EditText
    android:id="@+id/et_input"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:cursorVisible="true"
    android:textColor="@color/colorBlack"
    android:textCursorDrawable="@drawable/my_cursor"
    android:background="@null"
    android:textSize="16sp" />

2、在Java代码中设置默认获取焦点: etInput.requestFocus();// 显示输入框的光标
3、在AndroidManifest.xml中设置 fragment的宿主Activity的 windowSoftInputMode 属性为 stateAlwaysHidden。

<activity
    android:name=".MainActivity"
    android:launchMode="singleTask"
    android:windowSoftInputMode="stateAlwaysHidden"/>

详情:相关博文链接

16.NestedScrollView嵌套子控件点击事件无效。

解决:主要是处理NestedScrollView自带的onInterceptTouchEvent方法拦截它的滑动事件。
详情:相关博文链接

17.scrollview嵌套scrollview中,需要处理点击事件,却出现滑动卡顿问题。

解决:需重写外层scrollview,并对拦截onInterceptTouchEvent拦截事件重写,对滑动和点击事件进行处理。可直接在页面中用该重写的scrollview控件。子布局中需要点击事件的则获取焦点,设置监听来处理即可。

public class PaperPreviewNestedScrollView extends NestedScrollView {
    public PaperPreviewNestedScrollView(@NonNull Context context) {
        super(context);
        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    public PaperPreviewNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    public PaperPreviewNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    private int downY;
    private int mTouchSlop;

    @Override//事件拦截
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        int action = ev.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                downY = (int) ev.getRawY();//按下
                break;
            case MotionEvent.ACTION_MOVE:
                int moveY = (int) ev.getRawY();
                if (Math.abs(moveY - downY) > mTouchSlop) {//判定为滑动
                    return true;
                }
                break;
        }
        return super.onInterceptTouchEvent(ev);//避免出现该问题Invalid pointerId=-1 in onTouchEvent导致界面闪退
    }
}

有篇总结scrollview博文编写让我受益匪浅,大家都可以学习借鉴一下:相关博文链接

18.recycleview跳转到指定位置

相关博文链接

19.收起系统软键盘

相关博文链接

20.图片适配

相关博文链接

21.解决Recyclview中的Glide加载图片闪烁问题。

相关博文链接

22.解决圆形头像的问题。

①添加依赖Gradle Scripts->build.gradle->dependencies
===》 implementation ‘de.hdodenhof:circleimageview:3.1.0’
②在布局文件中引入代码:

<de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:src="@drawable/timg"
    app:civ_border_width="2dp"
    app:civ_border_color="#FF000000"/>

具体详解链接

23.解决圆弧进度条的问题。

①添加依赖Gradle Scripts->build.gradle->dependencies
===》implementation ‘com.github.RelinRan:CircleProgressView:2022.7.28.1’

②在布局文件中引入代码:

	<androidx.widget.CircleProgressView
        android:id="@+id/iv_correct_img2"
        android:layout_width="@dimen/dp_30"
        android:layout_height="@dimen/dp_30"
        app:max="100"
        app:progress="76"
        app:progressColor="#36E5CA"
        app:progressStrokeWidth="2dp"
        app:progressStartAngle="0"
        app:progressTextVisibility="invisible"
        app:strokeCapRound="true" />

详细链接

24.当项目开发中突遇到Failed to compile values file.并不提示其他,查看下自己编写的资源文件是否与系统文件命名冲突了。

博文链接

25.当遇到int转换类型长度超出时会爆错 java.lang.NumberFormatException: For input string: "xxxx"时,要更换转换类型。

博文链接

26. Recycleview实现单选功能。

博文链接

27.如何彻底解决Android8.0(API26+)及以上版本中模拟器运行通告栏时报Developer warning for package "com.example.my"Failed to post notification on channel ‘default’ See log for more details错误问题。

博文链接

28.错误问题:Android Glide You cannot start a load for a destroyed activity 的异常及解决方法。

解释:其原因是由于Activity/Fragment 已经 destroy,而程序代码中依然在使用 Glide 加载图片导致的。详情解析

29.引入json动画

①在build(app)文件中引入依赖。

 implementation 'com.airbnb.android:lottie:$lottieVersion'

②将相关的json文件和图片放入项目中的assets文件夹中。
③在布局文件中使用该布局
lottie_imageAssetsFolder 属性对应相关的图片;
lottie_autoPlay属性对应自动播放;
lottie_loop属性对应循环播放;
lottie_fileName属性对应相关的文件名。

                <com.airbnb.lottie.LottieAnimationView
                    android:id="@+id/iv_star_anim"
                    android:visibility="gone"
                    android:layout_width="@dimen/dp_110"
                    android:layout_height="110dp"
                    android:layout_marginTop="-16dp"
                    android:layout_marginStart="-10dp"
                    app:lottie_autoPlay="true"
                    app:lottie_fileName="gifData.json"
                    app:lottie_imageAssetsFolder="images/"
                    app:lottie_loop="true"/>

30.在开发过程中打包APK后,却无法装进真机上时,可使用adb命令安装APK,查看错误详情。

错误详情:Android Failure [INSTALL_FAILED_VERSION_DOWNGRADE]
在安装APK的过程中使用比以前低的VersionName(版本),因为现安装的版本低于你机器版本,所以会出现会导致无法直接安装更新APK,在AS运行编译可直接跑真机,但打包的APK不行。因此可以卸载后重装,或者是更改更高一个的版本号后重新打包APK安装。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值