标签:类来 界面 dialog 遇到 静态 报错 context 整理 view
1.NoSuchMethodError: No virtual method getBytes(J)[B in class Lcom/huawei/kvdb/KVConnection; or its super classes (declaration of 'com.huawei.kvdb.KVConnection' appears in /system/framework/hwframework.jar)
解决 去除掉PNG合法性检测,在build.gradle里的buildToolsVersion下面添加以下两句: buildTypes { release { minifyEnabled false aaptOptions.setProperty("cruncherEnabled",false) proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } }
2.Unable to add window -- token android.os.BinderProxy@adbfbf8 for displayid = 0 is not valid; is your activity running?
1、错误分析:
从错误信息我们也可以明白其原因,此问题根本原因就是由于将要弹出的dialog所要依附的View已经不存在导致的。
2、什么地方可能照成此问题:当界面销毁后再弹出来;或者界面跳转时我们的view发生改变,dialog依附的context发生变化或者界面未运行了。
此外,很多时候我们需要通过一个非组件类来调用一个view类的方法来弹出dialog或Toast,这样就需要再提供一个静态context来创建这个dialog或者Toast。例如我们在一个view中通过一个静态类来弹出一个对话框:AlertDialog.Builder?builder?=?new?AlertDialog.Builder(mContextNew);当然并不是所有静态context都是可以用来创建dialog的,例如***App().getApplication().getApplicationContext()这个context就不行,因为它并不代表哪一个Activity或者View。。这样就无法add这个dialog。
此view用于绑定显示数据,我们在其构造方法中初始化一个静态变量mContextNew为此view的mContext。这样我们就可以通过一个静态类来弹出对话框了,只需传入这个静态的context(mContextNew)就可以了。。但是这个静态的context如果只在构造方法中初始化的话是会存在问题的,因为如果另起了一个界面其绑定数据的view也是用的这个view那么这个静态context就会被重新修改。。因此当这个新的界面finish后返回到上次的界面,这个静态的context是刚才已经finish的view的context。因此如果仍然传入这个静态变量通过一个静态类来弹出对话框就会出现上述找不到window的错误了。
解决方法:
if(!((Activity) context).isFinishing()) { //show dialog }
标签:类来,界面,dialog,遇到,静态,报错,context,整理,view 来源: https://www.cnblogs.com/wang-jingyuan/p/12174660.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。