Android疑难记录

  java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionVie 
  有很多原因可能会导致出现这个问题。我的情况是下拉刷新监听里我先把list.clear()但是没有调用notify()通知adapter数据更新,然后进行网络请求能到数据返回才会向list中添加数据并notify()通知adapter数据更新。
  所以会导致下拉刷新到网络请求返回数据期间界面上显示有数据但实际上我已经清空list,数据源和adapter数据不匹配因此报错。
  解决办法1:下拉刷新list.clear()后立马notify()等到网络数据返回修改list数据后再notify()  2:在网络数据返回后再进行list.clear()并立马进行notify()
  implementation 'androidx.appcompat:appcompat:1.3.0'
  如果多个module依赖版本没有统一就会出现报错androidx.fragment.app.Fragment Result Owner' supertype of 'androidx.fragment.app.FragmentManager'. Check your module classpath for missing or conflicting dependenciesandroidx.fragment.app.Fragment Result Owner' supertype of 'androidx.fragment.app.FragmentManager'. Check your module classpath for missing or conflicting dependencies不影响编译项目运行但是看到满屏爆红想必也不是诸位想看到的

 全局强制指定整个项目依赖固定版本的第三方库,避免重复依赖不同版本相同库
 configurations.all {
        resolutionStrategy.force 'androidx.appcompat:appcompat:1.3.1'
 }
 Recyclerview的GridLayoutManager可以通过setSpanSizeLookup方法动态设置每一个item的占位 
 数,以此来达到动态设置每行列数的效果
 val gridLayoutManager = GridLayoutManager(context, 2);
 gridLayoutManager.spanSizeLookup=object :GridLayoutManager.SpanSizeLookup(){
                                override fun getSpanSize(position: Int): Int {
                                    return if(position==0){
                                        2//第一个item占两个item位置
                                    }else{
                                        1//其余item依然只占一个位置
                                    }
                                }
                            }
   
   CardView在RelativeLayout中使用是会一直在viewTree的顶层显示,因为cardview默      
   认cardElevation有值布局厚度会大于一般控件所以一直显示在顶层。用下面代码设置为0 
   就可正常显示其他view
   app:cardElevation="0dp"
java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)
viewpager2 item布局必须使用match_parent
Only fullscreen opaque activities can request orientation
解决办法:
android:screenOrientation="portrait"去掉清单文件中设置的方向
异常:android.content.res.Resources$NotFoundException: String resource ID #0x1异常 为控件展示object类型与require类型不符合,不是字面意义上的资源文件找不到
异常:java.io.IOException: unexpected end of stream on com.android.okhttp.Address@67ce78cc,外网没有访问后端请求域名权限
异常:android.database.sqlite.SQLiteException: duplicate column name: LOCALAREADIS (Sqlite code 1): , while compiling: alter table lossfits add column LOCALAREADIS TEXT;, (OS error - 88:Socket operation on non-socket)重复添加列引起的异常,比如建表语句中已经有此列但是又写了新的增加这一列的sql就会导致重复添加列的问题
异常:java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery: SELECT REPORT_NO FROM task_main_info WHERE (TASK_STATE=? or TASK_STATE=? or TASK_STATE=? or TASK_STATE=? or TASK_STATE=?) and EMP_CODE=? 数据库异常,查询语句入参为空
异常:this message is alerday in use ; 同一个message对象在handler.sendmessage后又handler.sendmessage一次
异常:java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{312e37e position=1 id=-1, oldPos=-1, pLpos:-1 no parent} android.support.v7.widget.RecyclerView{b991391 VFED..... ......ID 0,240-1080,1711 #7f0804cb app:id/repair_info_rv}, adapter:com.tp.claim.util.ManHourAdapter@55458fe, layout:android.support.v7.widget.LinearLayoutManager@a7b785f, context:com.tp.claim.ui.ChargedInfoRepairTwoActivity@84f949c
异常:java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()在thread内部再开启线程报错
异常:Error:com.android.dx.cf.code.SimException: invalid opcode ba (invokedynamic requires --min-sdk-version >= 26)   需要依赖implementation"com.google.guava:guava:23.0-android
特殊:Java中时间戳精度是13位精确到毫秒 C++中时间戳长度为10位精确到秒
特殊:Java中BigDecimao不要使用new BigDecimal(double)的构造方法要是用.valueof()
flutter exception :[SocketException: Failed host lookup: 'www.xyz.com' (OS Error: No address associated with hostname, errno = 7)](https://stackoverflow.com/questions/54551198/how-to-solve-socketexception-failed-host-lookup-www-xyz-com-os-error-no-ad)  检查手机当前网络是否通畅,当时因为用的是公司内网出现此问题
3.4 as默认使用gradle版本为5.1.1,用该版本build的时候会报transformDexWithInstantRunSlicesApkForDebug这个错误,和Instant Run有关,关了Instant Run后不报错了。想要使用可以升级gradle到5.4版本
kotlin.UninitializedPropertyAccessException: lateinit property userName has not been initialized 在Kotlin中lateinit修饰的属性使用前必须初始化
编译异常:com.android.tools.idea.gradle.project.sync.ng.NewGradleSyncNotSupportedException: New Gradle Sync is not supported due to containing Kotlin modules using an unsupported plugin version  当前gradle版本和gradle插件版本不匹配导致
java.lang.IllegalStateException:at java.util.ArrayList$Itr.remove(ArrayList.java:873) 删除判断条件要精准不能一次iterator.remove多个item
java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.          SQL查询数据库数据是获取的数据不在查询的列内
com.novoda.gradle.release.AndroidLibrary$LibraryUsage.getDependencyConstraints()Ljava/   gradle版本和gradle插件版本不一致
Gridview的item布局使用cardview时cardview一定要设置margin否则无效
华为手机设置-无障碍-打开了高对比度文字 会导致app内设置字体颜色无效只有黑白两种颜色。
Android10版本
org.xmlpull.v1.XmlPullParserException
Binary XML file line #10: invalid color state list tag gradient
这个报错真的很无语原因是Figma导出的svg使用了android:offset="0" 属性,但是这个属性最低支持24,而我的App最低支持23就导致Android 6.0的用户会崩溃,所以尽量减少Svg的使用,一定要使用也是简单颜色不太复杂的再使用
Error:Unable to decode stream: java.io.FileNotFoundException: 
/storage/emulated/0/DCIM/xxx/xxxx.png:open failed: EACCES (Permission denied)
Android10及以上启用了分区存储单纯申请Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,并不能取到图片地址,使用如下代码获取
@RequiresApi(Build.VERSION_CODES.P)
    fun getBitmap(context: Context, data: Intent?): Bitmap? {
        try {
            return if (data?.data != null) {
                val sourceMap: ImageDecoder.Source =
                    ImageDecoder.createSource(context.getContentResolver(), data.data!!)
                ImageDecoder.decodeBitmap(sourceMap).copy(Bitmap.Config.ARGB_8888, true)
            } else {
                null
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return null
    }
java.lang.ClassNotFoundException: Didn't find class "xxx.ContextEx" on path: DexPathList
不是网上常见原因,是因为fork的项目使用的jdk版本为1.8而我本机是11导致的

你可能感兴趣的:(Android疑难记录)