Android开发坑爹列表

Android开发备忘录

积累一些Android开发时遇到的坑点。虽然有些问题比较基础,但是开发调试的时候也会难以察觉,较容易中招。

String --> null
数据库事务
缩放时间

<h2 id = "stringNull">String --> null</h2>

坑爹事件

开发Android数据库时,封装了sqlite SQL语句。Column的对象构造函数是这样婶儿滴。

public Column(String name, String type, String constraints) {
            content = " " + name + " " + type + constraints;
        }

然后有些情况会将constraints设置为null。然后SQL语句会出现类似 " stauts INTEGER null" ,这样的情况。

分析

String变量为空时(不是"")。于其他字符串拼接或者打印输出时,会转换成"null"。

String empty = null;
String a = "abc" + null;

a 的值为 "abcnull"

<h2 id = "databseTransaction">数据库事务</h2>

坑爹事件

开发Android数据库时, 在插入函数中增加了数据库事务语句。当时是这样滴

    public long insertTask(TaskBean taskBean) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(TaskBean.CREATETIME, taskBean.createTimeMs);
        values.put(TaskBean.UPDATETIME, taskBean.updateTimeMs);

        db.beginTransaction();
        long id = db.insertOrThrow(DatabaseHelper.TABLE_TASK, null,values);
        db.endTransaction();

        taskBean.id = id;
        return id;
    }

然后发现每次id 返回都是1,而且根本就没有数据插入。

分析

db.beginTransaction() 开启一个事务,db.endTransaction()结束一个事务, 同时检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。
所以在结束事务之前需要执行setTransactionSuccessful()

<h2 id = "scaleEvent">缩放事件</h2>

坑爹事件

做一个view的缩放手势检测,然后对其进行缩放。检测到TouchEvent ,但是监听不到缩放手势,源代码如下:

        editArea.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = MotionEventCompat.getActionMasked(event);
                mScaleGestureDetector.onTouchEvent(event);
                switch (action) {
                    case MotionEvent.ACTION_DOWN:
                        break;

                    case MotionEvent.ACTION_POINTER_DOWN:
                        scaling = true;
                        break;

                    case MotionEvent.ACTION_UP:
                            if (!mEditFlag && !scaling) {
                                dosomething();
                            }
                        }
                        scaling = false;

                        default:
                            return false;
                }
                return false;
            }
        });

分析

原因是如果在接收ACTION_DOWN的时候返回false的话,是不能接收后续的MotionEvent
所以要在接收ACTION_DOWN的时候返回true。或者在onInterceptTouchEvent()中实现事件监听。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,349评论 25 708
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,524评论 0 17
  • 失眠了一整夜的早上爬起来 忍住翻腾灼烧的胃 和头疼欲裂的大脑洗澡洗头发 搭配好衣服鞋子画着淡妆洒上香水去上班 最绝...
    香公子阅读 252评论 0 0
  • 你的感情, 我珍惜, 并且感激, 但无以回应。 那些花自飘零水自流的过往, 当时只道是寻常。 谢谢你信任我的选择与...
    木子一叶阅读 140评论 3 3
  • 不知何故,聊天时,大家把话题引到愚公移山的故事上去了。这个人尽皆知的故事,让人不由得想到愚公那种永不放弃,坚持到底...
    补拙莫如勤LV阅读 521评论 2 2