整理出這些問題分享給大家,是為了避免大家在遇到此類坑時纵苛,犯同樣錯。
一.Xstream遇到的坑
1.對于Xml解析實體啸胧,在更新版本時赶站,增加了字段,老版本發(fā)生解析錯誤纺念,無法解析出相應實體
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);
}
這樣的代碼的確可以解析出實體,可是在拓展時想括,就出現(xiàn)如上問題陷谱。
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內容铺根,可是改完后宪躯,安卓前臺出現(xiàn)“xml解析錯誤”問題,我以為我xml的換行有問題位迂,結果我多次修改后访雪,還是出現(xiàn)“xml解析錯誤”問題,然后我選擇安卓前臺調試掂林,發(fā)現(xiàn)后臺得到的字符串臣缀,在java前臺使用時,字符串前面總是帶“\uFEFF”字符串泻帮,查閱資料得知這是帶BOM頭的UTF-8的編碼字符集精置,這是為了兼容UTF-16等編碼字符集,但是Java處理此編碼時锣杂,會默認加“\uFEFF”字符串脂倦。
2.2問題得到的解決方法
我的解決方法是,用默認編碼字符集的EditPlus編輯器新建了此xml文件元莫,將老文件的內容復制到此文件內赖阻,然后這個問題才得以解決。
二.鍵盤彈起柒竞,按鈕被遮蓋問題
1.詳細問題描述
在諸如登錄界面時政供,鍵盤彈起,總是遮蓋住登錄按鈕,這大打折扣了用戶體驗布隔,為了優(yōu)化离陶,我封裝了工具類,只需傳Activity衅檀,rootview和按鈕view招刨。但是在遇到RelativeLayout布局時出現(xiàn)了問題,鍵盤會將layout_alignParentBottom屬性為true的ViewGroup頂起哀军,原本代碼如下:
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
登錄界面如下:
鍵盤彈起時出現(xiàn)的效果如下:
2.問題得到的解決方法
if(!(rootView instanceof RelativeLayout)){
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
開發(fā)App都繞不過的坑-代碼兼容性
安卓開發(fā)比IOS開發(fā)區(qū)別最大的在于一點:安卓碎片化沉眶,這樣大大增加了代碼的開發(fā)難度性,與減小了App的穩(wěn)定性杉适。
關于screenOrientation的筆記
android:screenOrientation = ["unspecified" | "behind" |
"landscape" | "portrait" |
"reverseLandscape" | "reversePortrait" |
"sensorLandscape" | "sensorPortrait" |
"userLandscape" | "userPortrait" |
"sensor" | "fullSensor" | "nosensor" |
"user" | "fullUser" | "locked"]
其中sensorLandscape就是橫屏根據(jù)重力上下翻轉谎倔,sensorPortrait豎屏根據(jù)重力上下翻轉。