Android开发中遇到的bug合集
(针对自己开发过程中遇到的bug合集记录下来,会持续更新该文章,需要自取,共勉。)
文章目录
- Android开发中遇到的bug合集
- 1.项目编译的过程中遇到"Task ‘assembleDebug’ not found in project ‘:app’."问题。
- 2.使用adb install安装apk的时候,设备上已经安装过一个版本,再次安装的话,会安装失败,出现如下提示信息:INSTALL_FAILED_ALREADY_EXISTS
- 3.解决 另一个程序正在使用此文件,进程无法访问问题。
- 4.打包APK不成功Caused by: java.lang.reflect.InvocationTargetException等问题。
- 5.okhttp请求失败:socket函数返回Too many open files问题。
- 6.RxJava操作符学习笔记
- 7.Android 二级列表控件ExpandableListView 的简单使用 :
- 8.Android 二级列表控件ExpandableListView 中子项目嵌套listview,出现listview显示不全只显示一条问题。
- 9.ExpandableListView嵌套ExpandableListView子项高度问题。
- 10.ExpandableListView嵌套ExpandableListView做三级列表,二级列表中数据重复问题。
- 11.dialog显示对话出现多余的白色背景,是由于使用dialog自带的样式而造成的。
- 12.常用透明度
- 13.开发中,报错:java.lang.IndexOutOfBoundsException: Index: 1, Size: 0问题。
- 14.编译过程中遇到java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs 此类问题。
- 15.处理使用edittext控件时,进入页面自动弹出自带的软键盘问题。
- 16.NestedScrollView嵌套子控件点击事件无效。
- 17.scrollview嵌套scrollview中,需要处理点击事件,却出现滑动卡顿问题。
- 18.recycleview跳转到指定位置
- 19.收起系统软键盘
- 20.图片适配
- 21.解决Recyclview中的Glide加载图片闪烁问题。
- 22.解决圆形头像的问题。
- 23.解决圆弧进度条的问题。
- 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 的异常及解决方法。
- 29.引入json动画
- 30.在开发过程中打包APK后,却无法装进真机上时,可使用adb命令安装APK,查看错误详情。
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安装。