日常工作中遇到的异常整理笔记

#4187 java.lang.IllegalArgumentException  
解决方案
该异常表示view没有添加到窗口管理器,通常是我们dismiss对话框的时候,activity已经不存在了,建议不要在非UI线程操作对话框。
[解决方案]:常发生这类Exception的情形都是,有一个费时的线程操作,需要显示一个Dialog,在任务开始的时候显示一个对话框,然后当任务完成了在Dismiss对话框,如果在此期间如果Activity因为某种原因被杀掉且又重新启动了,那么当dialog调用dismiss的时候WindowManager检查发现Dialog所属的Activity已经不存在,所以会报错。
要避免此类Exception,就要正确的使用对话框,也要正确的使用线程:
1.不要在非UI线程中使用对话框创建,显示和取消对话框;
2.尽量少用单独线程,出发是真正的耗时操作采用线程,线程也不要直接用Java式的匿名线程,除非是那种单纯的操作,操作完成不需要做其他事情的。
3.如果是在fragment中发起异步网络的回调中进行dialog的操作,那么在操作之前,需要判断 isAdd( ),避免fragment被回收了但是还要求dialog去dismiss
4.在Activity onDestroy中对Dialog提前进行关闭
 
  

java.lang.NumberFormatException

解决方案
该异常表示字符串尝试转换为其他类型出错,字符串转换为数字异常。
在Android 4.4.2中,类似于"+00"转换为数字会抛出此异常,但在Android 5.1.1则能被正确处理。
[解决方案]:当字符串尝试转换为数字类型失败时,抛出该异常。举例如下:String test = "test123";int result = Integer.parseInt(test);此时由于字符串中含有非数值字段,将会抛出该异常。
补充:在表单中,如果为纯数字,应该限定EditText的inputType为number以避免输入符号。其他情况则应该对字符串进行过滤处理

     
     

#4185 java.lang.NullPointerException

Attempt to invoke virtual method 'java.lang.String com.baletoo.service.net.BaseResp.getMsg()' on a null object reference

解决方案

1,Attempt to invoke virtual method 'android.net.NetworkInfo$State android.net.NetworkInfo.getState()' on a null object reference 
ConnectivityManager.getNetworkInfo(Network) 返回了null。需检查权限以及是否机型兼容问题。
2,
Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
最常见是在 回调接口, 如 网络请求回调,第三方登录回调 返回的时候 调用 context.startActivity 时 context 为空导致。可以在 context 为空的时候使用 Application Context, 加上
if (!(context instanceof Activity)) {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}

     
     
#1809 java.lang.IndexOutOfBoundsException
Invalid index 1, size is 1
解决方案
该异常表示不合法下标,通常是因为访问了list不合法的位置,建议检查数据是否越界。
[解决方案]:
1.遍历数组/字符串等集合前,要判断遍历对象的长度;
2.操作数组/字符串等集合前,要检查角标是否在长度允许范围内;
3.ListView操作不当也会引起该异常,这种情况下一般是由于List渲染的时候,外面的数据源发生变化导致的。举例如ListView滚动时点击刷新将会报错,解决方法是ListView滚动时将刷新置为不可点击。或者改变数据源之前调用adapter的notifyDataSetInvalidated()方法将原数据源设置为无效。
   
   
    解决方案
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值