项目遇到的坑

2017-04-14  本文已影响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竖屏根据重力上下翻转。

后期会不定时更新此文章

上一篇下一篇

猜你喜欢

热点阅读