日积月累--exception记录

这篇博客记录了Android开发中遇到的各种错误和相应的解决方案,包括sqlite文本长度限制问题、Fragment错误、NullPointerException、Gradle构建错误、R文件生成问题、Glide加载图片导致的OOM、EventBus订阅异常等,提供了详细的错误分析和解决办法链接。
摘要由CSDN通过智能技术生成

[2017年3月16日18:39:18]

关于Android的sqlite数据类型text长度限制的问题?

这也许不能称为一个bug,但是比较坑,所以贴在了这里。在Android的sqlite中存储一个字符串,发现总是数据丢失,我去查询sqlite官方的数据类型text长度很大,能满足我的要求,但是为什么Android中的sqlite就满足不了了呢!导出查看db文件,发现字符长度只有8192个字符,显然数据是丢失了。暂且记录在这里。还有一点需要说明的是rom为flyme5.0。

[2017年2月6日15:14:47]

Android 中有关继承Fragment的一些错误

解决方案:http://blog.sina.com.cn/s/blog_c58a37cb0102vibh.html

[2017年1月16日17:25:03]

java.lang.NullPointerException (no error message)

解决方案:http://stackoverflow.com/questions/39183674/java-lang-nullpointerexception-no-error-message
[2017年1月14日10:36:22]

Error:error: File is case-insensitive equivalent to: \app\build\intermxxxxxxxxxxxxxxxx

解决方案:Android res文件夹下的所有文件不能有大写字符,如果出现大写字符会导致R.java无法生成
Android项目是的R文件是由系统生成的资源的定义,如果出同冲突,错误,那么android 无法生成R文件 ,即使有时候你xml文件没有错误,他都无法生成。针对此问题,总结以下几个方面的原因:

  1. xml本身有错误
    R.java这个文件是会自动生成的,但是如果你不小心xml文件写错了,或者不小心在编辑xml的时候点击了run(其实这个时候会运行这个xml文件,会生成一个同名的xml文件,后缀为xx.out.xml),然后正巧你游clear了一下项目,你可能会发现gen下面的R.java的文件没有了,这个在刚开始的时候很气人,真不知道怎么解决,后来发现,只要xml文件有问题,系统是绝对不会给你自动生成这个R.java文件,因为他要参照你的每张xml里的数据来生成R.java,所以自然就生成不了了。虽然知道了原因但是问题头疼,假如项目的layout xml文件有几十个,这个时候怎么办,难道要一个一个xml的看吗,呵呵,其实也不是,把console中的信息clear一下,然后再clear项目一下,这个时候,console中会有很多红色的信息,参照这个肯定能准确的找到哪个文件报错了。
    下面这个事误运行了xml文件,可以看到gen的包不是空的,R.java文件也存在,并且明确的支出了是layout包中的错误

  2. 编码格式不正确
    有时候由于编码格式问题,造成无法生成R文件,此时后,把编码格式变成GBK或者UTF–8即可

  3. 配置问题,转义字符的问题
    因为XML有些特殊字符需要转义,例如”<>&;”’ “等

[2016-9-22 17:53:35]

Error:Execution failed for task ‘:transformClassesWithJarMergingForDebug’.> com.android.build.api.transform.TransformException: java.util.zip.ZipException:

例如:Error:Execution failed for task ‘:transformClassesWithJarMergingForDebug’.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/multidex/MultiDex$V14.class

Error:Execution failed for task ‘:transformClassesWithJarMergingForDebug’.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/ColorRes.class

这是由于导包时重复造成的。解决这个问题有个比较霸气的方法:

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
     all*.exclude group: 'com.android.support', module: 'support-annotations'
}


retrofit的baseurl不支持正斜杠

https://github.com/square/retrofit/issues/498#issuecomment-44097930



[2016-9-5 16:19:47]

Dialog中getOwnerActivity()为空

这个可以通过dialog.setOwnerActivity( )进行设置。

在使用v7包构建通知时,设置PendIntent出现异常getSlotFromBufferLocked: unknown buffer: 0xb36a9630

[2016-8-22 14:59:19]这个问题也着实的让人摸不着头脑,用的是最普通的通知,代码如下:

 NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
        Intent contentIntent = new Intent(context, MessageActivity.class);
        PendingIntent contentPendIntent = PendingIntent.getActivity(context, 0, contentIntent, 0);

        Notification notification = builder
                .setContentTitle(context.getString(R.string.app_name))
                .setContentText(bundle.getString(JPushInterface.EXTRA_MESSAGE))
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.jpush_notification_icon)
                .setColor(Color.parseColor("#00EEFF"))
                .setLargeIcon(BitmapFactory.decodeResource(
                        context.getResources(), R.mipmap.ic_launcher))
                .setContentIntent(contentPendIntent)
                .build();

        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        manager.notify(1, notification);

我尝试添加:contentIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);居然把问题解决了。
有开发者将这个异常提交到了Google issues:https://code.google.com/p/android/issues/detail?id=192357#makechanges
其实也不难分析,从异常的字面意思来进行分析,可以看出和堆栈还是有点关系的。



cm的多用户模式导致的无法安装应用问题

在这种模式下,应用卸载,只是卸载了当前用户的。其他用户的应用并没有卸载。

AndroidStudio在打包应用时总是出错,运行时没有错

一般是lint检查造成了,在该项目的build.gradle下添加:

android{
    lintOptions{
        checkAllWarnings false
        abortOnError false
    }
}


项目路径的命名不符合ASCII编码标准很可能构建不成功

所谓符合ASCII标准,粗略的讲就是不要出现汉字。因为汉字不在ASCII标准里面。这个异常告诉我们,项目路径不能用汉字命名

AndroidStudio不打印exception的一个原因

最近在项目的全局状态下,对异常进行了捕获(包括fatal级别的异常)。突然发现AS不再打印该异常了。这是AS不打印异常的一种情况。

如果fragment的add动作,没有通过事件提交,而在此使用isAdd则还会显示没有添加

需要执行commit才能生效。

点击GridView的某个条目时报的空指针问题

假如你点击条目1,但是你在GridView的监听事件里面访问了其他没有被显示的子view,此时会报空指针。因此对GridView所有子view的操作不要放在其监听里面。举个例子:
图片名称
例如在上图有以下操作,当点击某个条目时该条目背景色变为蓝色,其他条目颜色为白色,此时可能就牵扯到对所有子view的遍历。
图片名称
但如果子view被遮挡了,例如被键盘遮挡了,此时如果再点击某个条目那些被遮挡的子view就会报空指针。
这样的逻辑实现最好放在adapter中。

Android的Uri获取路径常常是不准确的,尤其是文件的uri

解决办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值