那些年踩过的坑 android开发致命的错误合集

1. 使用IDE快捷生成代码, 导致onCreate()方法引用错误,如图:

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        setContentView(R.layout.activity_monitor);
    }

此方法和程序入口onCreate一致,只不过参数多了一个,不过效果却大不相同,使用此方法,会导致界面无视图!!


2.SQLite数据库报android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1的错误

错误出现的情况,一般为查询获取到cursor后,直接获取数据。如下:

    db = helper.getWritableDatabase();
    Cursor cursor = db.rawQuery("select iccode from student where _id = 92", null);
    String string = cursor.getString(0);

由于android中SQLite数据库处理使用Cursor时,游标不是放在为0处的下标,而是放在为-1处的下标开始的。

也就是说返回给cursor查询结果时,不能够马上从cursor中提取值,要判断是否为空,在moveToFirst或者moveToNext之后,再进行取值。

3.使用selector选择器点击无效果

放一个最近在用的边框选择器,把效果写在一起了

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <layer-list>
            <!-- This is the line -->
            <item>
                <shape>
                    <padding
                        android:bottom="0dp"
                        android:left="0dp"
                        android:right="1dp"
                        android:top="1dp" />
                    <solid android:color="#ffffff" />
                </shape>
            </item>
            <!-- This is the main color -->
            <item>
                <shape>
                    <solid android:color="#383838" />
                </shape>
            </item>
        </layer-list>
    </item>

    <item android:state_pressed="true" >
        <layer-list>
        <!-- This is the line -->
        <item>
            <shape>
                <!--定义边线-->
                <padding
                    android:bottom="0dp"
                    android:left="0dp"
                    android:right="1dp"
                    android:top="1dp" />
                <!--边线颜色-->
                <solid android:color="#ffffff" />
            </shape>
        </item>
        <!-- This is the main color -->
        <item>
            <!--定义主体样式-->
            <shape>
                <solid android:color="#f33030" />
            </shape>
        </item>
    </layer-list>
    </item>

</selector>

此时,在控件background添加,增加控件点击事件,会发现点击却没有想要的效果,这时若不在意选择器的条目顺序,可能找半天也发现不了什么错误。

问题就出在选择器中条目顺序的变化,在解析的时候,虚拟机会以从上到下的顺序解析,因为最顶部选择器的item中没有设置属性,所以会被系统认为为默认效果,

而不再读取下一条。修改方法即为把选择器中条目item属性为空的放在最后即可。


3.请不要犯把背景定义为白色,而又把文本颜色定义为同一种颜色,而抱怨文本显示不出来的错误。


4.空指针异常。这是一个老生长谈的问题,可惜问题却是依旧如见,尤其是在文本的地方上,检查机制特别重要。最后和后台配合的过程中,用户的注册帐号信息被删除,导致前端收到帐号number为空,原以为以这个为主键最不可能为空的数据却突然null,导致应用之前一直好好的,突然莫名崩溃。。。


5.不要把耗时任务写在主线程中。最近习惯用Rx写异步,在做图片选择器的时候,使用框架带的图片压缩方案不太如意,于是使用LuBan对获取到的图片再压缩,在使用时候,使用Rx链式调用,在使用flatMap关键词调用Obserable时,由于在最终调用端写了在io线程执行,便没在意在flatMap端的Obserable执行线程,导致界面一卡再卡数秒,检查时才发现问题。


6.出现问题要敢于啃源码。遇到的坑不想多谈了,框架都是人写的,相信你可以改进它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值