項目遇到的坑

整理出這些問題分享給大家,是為了避免大家在遇到此類坑時,犯同樣錯。

一.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豎屏根據重力上下翻轉。

后期會不定時更新此文章

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容