美文网首页
项目遇到的坑

项目遇到的坑

作者: 墨源为水 | 来源:发表于2017-04-14 11:45 被阅读136次

    整理出这些问题分享给大家,是为了避免大家在遇到此类坑时,犯同样错。

    一.Xstream遇到的坑

    1.对于Xml解析实体,在更新版本时,增加了字段,老版本发生解析错误,无法解析出相应实体

    1.1原本xml解析代码

    public static <T> T toBean(String xmlStr, Class<T> cls) {
            XStream xstream = new XStream(new DomDriver());
            xstream.processAnnotations(cls);
            return (T) xstream.fromXML(xmlStr);
        }
    

    这样的代码的确可以解析出实体,可是在拓展时,就出现如上问题。
    1.2改进之后xml解析代码

    public static <T> T toBean(String xmlStr, Class<T> cls) {
            XStream xstream = new XStream(new DomDriver()) {
                @Override
                protected MapperWrapper wrapMapper(MapperWrapper next) {
                    return new MapperWrapper(next) {
                        @Override
                        public boolean shouldSerializeMember(Class definedIn, String fieldName) {
                            if (definedIn == Object.class) {
                                return false;
                            }
                            return super.shouldSerializeMember(definedIn, fieldName);
                        }
                    };
                }
            };
            xstream.processAnnotations(cls);
            return (T) xstream.fromXML(xmlStr);
        }
    
    2.对于编辑后台Xml文件时,使用默认编辑器,传到前台会默认带“\uFEFF”字段串问题

    2.1问题详细描述
    今天刚刚在后台改了升级接口的xml文件,我当时是用Windows自带文本编辑器编辑的,修改了xml内容,可是改完后,安卓前台出现“xml解析错误”问题,我以为我xml的换行有问题,结果我多次修改后,还是出现“xml解析错误”问题,然后我选择安卓前台调试,发现后台得到的字符串,在java前台使用时,字符串前面总是带“\uFEFF”字符串,查阅资料得知这是带BOM头的UTF-8的编码字符集,这是为了兼容UTF-16等编码字符集,但是Java处理此编码时,会默认加“\uFEFF”字符串。

    2.2问题得到的解决方法
    我的解决方法是,用默认编码字符集的EditPlus编辑器新建了此xml文件,将老文件的内容复制到此文件内,然后这个问题才得以解决。

    二.键盘弹起,按钮被遮盖问题

    1.详细问题描述

    在诸如登录界面时,键盘弹起,总是遮盖住登录按钮,这大打折扣了用户体验,为了优化,我封装了工具类,只需传Activity,rootview和按钮view。但是在遇到RelativeLayout布局时出现了问题,键盘会将layout_alignParentBottom属性为true的ViewGroup顶起,原本代码如下:

    activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
    

    登录界面如下:

    图片.png

    键盘弹起时出现的效果如下:

    图片.png
    2.问题得到的解决方法
    if(!(rootView instanceof RelativeLayout)){
        activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
    }
    

    开发App都绕不过的坑-代码兼容性

    安卓开发比IOS开发区别最大的在于一点:安卓碎片化,这样大大增加了代码的开发难度性,与减小了App的稳定性。

    关于screenOrientation的笔记

    android:screenOrientation       =         ["unspecified" | "behind" |
    
                                         "landscape" | "portrait" |
                                         "reverseLandscape" | "reversePortrait" |
                                         "sensorLandscape" | "sensorPortrait" |
                                         "userLandscape" | "userPortrait" |
                                         "sensor" | "fullSensor" | "nosensor" |
                                         "user" | "fullUser" | "locked"]
    

    其中sensorLandscape就是横屏根据重力上下翻转,sensorPortrait竖屏根据重力上下翻转。

    后期会不定时更新此文章

    相关文章

      网友评论

          本文标题:项目遇到的坑

          本文链接:https://www.haomeiwen.com/subject/lmrwattx.html