日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android XML小工具

發布時間:2025/7/14 Android 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android XML小工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Android?XML小工具 一、概述 XML與Object互相轉化,支持8種基本類型、String和byte[]。byte[]需要經由base64編碼(API8以后才有,之前版本可以自己拷入)。 更多代碼及測試用例,見附件工程! 二、Object?–>?XML
  • public?class?XmlBuilder?{ ?
  • ?
  • ????/** ?
  • ?????*?由對象屬性生成XML ?
  • ?????*? ?
  • ?????*?@param?outs?輸出流 ?
  • ?????*?@param?encoding?字符編碼 ?
  • ?????*?@param?obj?對象 ?
  • ?????*/?
  • ????public?void?buildXml(OutputStream?outs,?String?encoding,?Object?obj) ?
  • ????????????throws?IllegalArgumentException,?IllegalStateException, ?
  • ????????????IOException,?IllegalAccessException?{ ?
  • ????????XmlSerializer?serializer?=?Xml.newSerializer();?//?創建一個Xml序列化 ?
  • ????????serializer.setOutput(outs,?encoding);?//?設置輸出流及字符編碼 ?
  • ????????serializer.startDocument(encoding,?true);?//?開始文檔 ?
  • ????????writeXml(serializer,?obj);?//?寫文檔 ?
  • ????????serializer.endDocument();?//?結束文檔 ?
  • ????????outs.close();?//?關閉輸出流 ?
  • ????} ?
  • ?
  • ????/** ?
  • ?????*?將對象屬性寫入XML ?
  • ?????*? ?
  • ?????*?@param?serializer?XML序列化 ?
  • ?????*?@param?obj?對象 ?
  • ?????*/?
  • ????private?void?writeXml(XmlSerializer?serializer,?Object?obj) ?
  • ????????????throws?IllegalArgumentException,?IllegalStateException, ?
  • ????????????IOException,?IllegalAccessException?{ ?
  • ?
  • ????????final?String?tag_type?=?"type"; ?
  • ????????final?String?tag_value?=?"value"; ?
  • ?
  • ????????Class<?>?cls?=?obj.getClass();?//?獲取對象運行時類 ?
  • ????????String?clsName?=?cls.getName();?//?獲取對象名稱 ?
  • ?
  • ????????serializer.startTag(null,?clsName); ?
  • ?
  • ????????Field[]?fields?=?cls.getDeclaredFields();?//?返回類聲明的所有字段 ?
  • ?
  • ????????boolean?isWrite; ?
  • ????????Class<?>?type;?//?變量類型 ?
  • ????????String?varName,?typeName,?value?=?null;?//?變量名、類型名、變量值 ?
  • ????????for?(Field?field?:?fields)?{ ?
  • ????????????isWrite?=?true; ?
  • ????????????type?=?field.getType();?//?獲取變量類型 ?
  • ????????????typeName?=?type.getName();?//?獲取類型名 ?
  • ????????????field.setAccessible(true);?//?設置變量可訪問 ?
  • ????????????if?(type.isPrimitive())?{?//?是否為基本類型 ?
  • ????????????????if?(typeName.equals("boolean"))?{ ?
  • ????????????????????value?=?String.valueOf(field.getBoolean(obj)); ?
  • ????????????????}?else?if?(typeName.equals("char"))?{ ?
  • ????????????????????//?char型未賦值,為默認'\u0000'時,會影響parser.next() ?
  • ????????????????????char?c?=?field.getChar(obj); ?
  • ????????????????????value?=?c?==?'\u0000'???"null"?:?String.valueOf(field ?
  • ????????????????????????????.getChar(obj)); ?
  • ????????????????}?else?if?(typeName.equals("byte"))?{ ?
  • ????????????????????value?=?String.valueOf(field.getByte(obj)); ?
  • ????????????????}?else?if?(typeName.equals("short"))?{ ?
  • ????????????????????value?=?String.valueOf(field.getShort(obj)); ?
  • ????????????????}?else?if?(typeName.equals("int"))?{ ?
  • ????????????????????value?=?String.valueOf(field.getInt(obj)); ?
  • ????????????????}?else?if?(typeName.equals("long"))?{ ?
  • ????????????????????value?=?String.valueOf(field.getLong(obj)); ?
  • ????????????????}?else?if?(typeName.equals("float"))?{ ?
  • ????????????????????value?=?String.valueOf(field.getFloat(obj)); ?
  • ????????????????}?else?if?(typeName.equals("double"))?{ ?
  • ????????????????????value?=?String.valueOf(field.getDouble(obj)); ?
  • ????????????????} ?
  • ????????????}?else?if?(typeName.equals("java.lang.String"))?{?//?是否為String ?
  • ????????????????value?=?field.get(obj)?==?null???"null"?:?field.get(obj) ?
  • ????????????????????????.toString(); ?
  • ????????????}?else?if?(typeName.equals("[B"))?{?//?是否為byte[] ?
  • ????????????????typeName?=?getTypeHelper(type);?//?字符代碼->[]形式 ?
  • ????????????????//?用Base64將byte[]轉成字符串(SDK?2.2之后自帶) ?
  • ????????????????value?=?field.get(obj)?==?null???"null"?
  • ????????????????????????:?Base64.encodeToString((byte[])?field.get(obj), ?
  • ????????????????????????????????Base64.DEFAULT); ?
  • ????????????}?else?{?//?其他類型暫不需要 ?
  • ????????????????isWrite?=?false; ?
  • ????????????} ?
  • ????????????if?(isWrite)?{ ?
  • ????????????????varName?=?field.getName();?//?獲取變量名 ?
  • ????????????????serializer.startTag(null,?varName); ?
  • ????????????????writeTag(serializer,?tag_type,?typeName); ?
  • ????????????????writeTag(serializer,?tag_value,?value); ?
  • ????????????????serializer.endTag(null,?varName); ?
  • ????????????} ?
  • ????????} ?
  • ?
  • ????????serializer.endTag(null,?clsName); ?
  • ????} ?
  • ?
  • ????/** ?
  • ?????*?字符代碼->[]形式 ?
  • ?????*/?
  • ????private?String?getTypeHelper(Class<?>?type)?{ ?
  • ????????if?(type.isArray())?{ ?
  • ????????????Class<?>?c?=?type.getComponentType(); ?
  • ????????????return?getTypeHelper(c)?+?"[]"; ?
  • ????????}?else?{ ?
  • ????????????return?type.getName(); ?
  • ????????} ?
  • ????} ?
  • ?
  • ????/** ?
  • ?????*?寫一個標簽及值 ?
  • ?????*/?
  • ????private?void?writeTag(XmlSerializer?serializer,?String?tag,?String?value) ?
  • ????????????throws?IllegalArgumentException,?IllegalStateException,?IOException?{ ?
  • ????????serializer.startTag(null,?tag); ?
  • ????????serializer.text(value); ?
  • ????????serializer.endTag(null,?tag); ?
  • ????} ?
  • ?
  • }?
  • 三、XML?->?Object
  • public?class?XmlParser?{ ?
  • ?
  • ????/** ?
  • ?????*?分析XML將對應值賦予對象 ?
  • ?????*? ?
  • ?????*?@param?ins?輸入流 ?
  • ?????*?@param?encoding?字符編碼 ?
  • ?????*?@param?obj?對象 ?
  • ?????*/?
  • ????public?void?parseXml(InputStream?ins,?String?encoding,?Object?obj) ?
  • ????????????throws?XmlPullParserException,?IllegalArgumentException, ?
  • ????????????UnsupportedEncodingException,?IllegalAccessException,?IOException?{ ?
  • ????????XmlPullParser?parser?=?Xml.newPullParser();?//?創建一個Xml分析器 ?
  • ????????parser.setInput(ins,?encoding);?//?設置輸入流及字符編碼 ?
  • ????????parseXml(parser,?obj);?//?解析文檔 ?
  • ????????ins.close();?//?關閉輸入流 ?
  • ????} ?
  • ?
  • ????/** ?
  • ?????*?分析XML詳細步驟 ?
  • ?????*? ?
  • ?????*?@param?parser?Xml分析器 ?
  • ?????*?@param?obj?對象 ?
  • ?????*/?
  • ????private?void?parseXml(XmlPullParser?parser,?Object?obj) ?
  • ????????????throws?XmlPullParserException,?IllegalArgumentException, ?
  • ????????????UnsupportedEncodingException,?IllegalAccessException,?IOException?{ ?
  • ?
  • ????????final?String?tag_value?=?"value"; ?
  • ?
  • ????????Class<?>?cls?=?obj.getClass();?//?獲取對象運行時類 ?
  • ????????String?clsName?=?cls.getName();?//?獲取對象名稱 ?
  • ?
  • ????????Field[]?fields?=?cls.getDeclaredFields();?//?返回類聲明的所有字段 ?
  • ?
  • ????????Field?field?=?null; ?
  • ?
  • ????????int?tagDepth;?//?標簽深度 ?
  • ????????String?tagName;?//?標簽名稱 ?
  • ????????int?eventType?=?parser.getEventType();?//?獲取事件類型 ?
  • ????????while?(true)?{ ?
  • ????????????if?(eventType?==?XmlPullParser.START_DOCUMENT)?{ ?
  • ????????????????//?Log.i("START_DOCUMENT",?"=START_DOCUMENT"); ?
  • ????????????}?else?if?(eventType?==?XmlPullParser.START_TAG)?{ ?
  • ????????????????//?Log.i("START_TAG",?"=START_TAG"); ?
  • ?
  • ????????????????tagDepth?=?parser.getDepth();?//?獲取標簽深度 ?
  • ????????????????tagName?=?parser.getName();?//?獲取標簽名稱 ?
  • ?
  • ????????????????if?(tagDepth?==?1)?{?//?一級標簽 ?
  • ????????????????????if?(!tagName.equals(clsName))?{?//?與對象名稱不一致時 ?
  • ????????????????????????throw?new?XmlPullParserException("XML首標簽名與對象名稱不一致"); ?
  • ????????????????????} ?
  • ????????????????}?else?if?(tagDepth?==?2)?{?//?二級標簽 ?
  • ????????????????????//?判斷標簽名稱是否符合類的某一字段名稱 ?
  • ????????????????????field?=?hasField(tagName,?fields); ?
  • ????????????????}?else?if?(tagDepth?==?3?&&?field?!=?null)?{?//?三級標簽 ?
  • ????????????????????if?(tagName.equals(tag_value))?{?//?如果是value標簽 ?
  • ????????????????????????setValue(obj,?field,?parser.nextText()); ?
  • ????????????????????????field?=?null; ?
  • ????????????????????} ?
  • ????????????????} ?
  • ????????????}?else?if?(eventType?==?XmlPullParser.END_TAG)?{ ?
  • ????????????????//?Log.i("END_TAG",?"=END_TAG"); ?
  • ????????????}?else?if?(eventType?==?XmlPullParser.TEXT)?{ ?
  • ????????????????//?Log.i("TEXT",?"=TEXT"); ?
  • ????????????}?else?if?(eventType?==?XmlPullParser.END_DOCUMENT)?{ ?
  • ????????????????//?Log.i("END_DOCUMENT",?"=END_DOCUMENT"); ?
  • ????????????????break; ?
  • ????????????} ?
  • ????????????eventType?=?parser.next();?//?下一解析事件 ?
  • ????????} ?
  • ????} ?
  • ?
  • ????/** ?
  • ?????*?判斷標簽名稱是否符合類的某一字段名稱 ?
  • ?????*? ?
  • ?????*?@param?tagName?標簽名稱 ?
  • ?????*?@param?fields?類字段集合 ?
  • ?????*?@return?符合:Field;否則:null ?
  • ?????*/?
  • ????private?Field?hasField(String?tagName,?Field[]?fields)?{ ?
  • ????????for?(Field?field?:?fields)?{ ?
  • ????????????if?(tagName.equals(field.getName()))?{ ?
  • ????????????????return?field; ?
  • ????????????} ?
  • ????????} ?
  • ????????return?null; ?
  • ????} ?
  • ?
  • ????/** ?
  • ?????*?給字段設值 ?
  • ?????*? ?
  • ?????*?@param?obj?對象 ?
  • ?????*?@param?field?字段 ?
  • ?????*?@param?value?值 ?
  • ?????*/?
  • ????private?void?setValue(Object?obj,?Field?field,?String?value) ?
  • ????????????throws?IllegalArgumentException,?IllegalAccessException, ?
  • ????????????UnsupportedEncodingException?{ ?
  • ????????Class<?>?type?=?field.getType();?//?變量類型 ?
  • ????????String?typeName?=?type.getName();?//?類型名 ?
  • ????????field.setAccessible(true);?//?設置變量可訪問 ?
  • ????????if?(type.isPrimitive())?{?//?是否為基本類型 ?
  • ????????????if?(typeName.equals("boolean"))?{ ?
  • ????????????????field.setBoolean(obj,?Boolean.parseBoolean(value)); ?
  • ????????????}?else?if?(typeName.equals("char"))?{ ?
  • ????????????????if?(!value.equals("null"))?{ ?
  • ????????????????????field.setChar(obj,?value.charAt(0)); ?
  • ????????????????} ?
  • ????????????}?else?if?(typeName.equals("byte"))?{ ?
  • ????????????????field.setByte(obj,?Byte.parseByte(value)); ?
  • ????????????}?else?if?(typeName.equals("short"))?{ ?
  • ????????????????field.setShort(obj,?Short.parseShort(value)); ?
  • ????????????}?else?if?(typeName.equals("int"))?{ ?
  • ????????????????field.setInt(obj,?Integer.parseInt(value)); ?
  • ????????????}?else?if?(typeName.equals("long"))?{ ?
  • ????????????????field.setLong(obj,?Long.parseLong(value)); ?
  • ????????????}?else?if?(typeName.equals("float"))?{ ?
  • ????????????????field.setFloat(obj,?Float.parseFloat(value)); ?
  • ????????????}?else?if?(typeName.equals("double"))?{ ?
  • ????????????????field.setDouble(obj,?Double.parseDouble(value)); ?
  • ????????????} ?
  • ????????}?else?if?(typeName.equals("java.lang.String"))?{?//?是否為String ?
  • ????????????if?(!value.equals("null"))?{ ?
  • ????????????????field.set(obj,?value); ?
  • ????????????} ?
  • ????????}?else?if?(typeName.equals("[B"))?{?//?是否為byte[] ?
  • ????????????if?(!value.equals("null"))?{ ?
  • ????????????????//?用Base64將字符串轉成byte[](SDK?2.2之后自帶) ?
  • ????????????????field.set(obj,?Base64.decode(value,?Base64.DEFAULT)); ?
  • ????????????} ?
  • ????????}?//?其他類型暫不需要 ?
  • ????} ?
  • ?
  • }?
  • 四、后記 Json與Object互相轉化,可看《Android實時繪制效果》附件工程內的JsonUtil。

    附件:http://down.51cto.com/data/2360816





    ? ? ?本文轉自winorlose2000 51CTO博客,原文鏈接:http://blog.51cto.com/vaero/900852,如需轉載請自行聯系原作者



    總結

    以上是生活随笔為你收集整理的Android XML小工具的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩精品人妻一区二区中文字幕 | 日韩中文字幕综合 | 久久人人爽人人爽人人 | 久操资源网 | 在线观看黄网站 | 亚洲国产精品无码专区 | 少妇又紧又色又爽又刺激视频 | 久久天天操 | 亚洲午夜电影网 | 欧美黑人又粗又大又爽免费 | 寂寞午夜影院 | 亚洲精品第三页 | 午夜成人免费视频 | 日韩成人影视 | 国产精华一区二区三区 | 中文字幕不卡 | 99视屏| 伊人久综合 | 亚洲精品一区二区三区中文字幕 | 中国 免费 av | 草久免费视频 | 人人做人人爱人人爽 | 中文字幕五区 | 青春草久久 | 91久久久久一区二区 | 九九热在线播放 | 中文字幕永久在线视频 | 午夜精品免费 | 日韩黄色片免费看 | 美女视频黄a视频全免费观看 | 亚洲一区 中文字幕 | 被扒开腿一边憋尿一边惩罚 | 伊人春色网 | 夜夜操免费视频 | 亚洲美女自拍 | 国产精品久久久久久久久久久久久 | 欧美日韩性生活 | 国产爆乳无码一区二区麻豆 | 亚洲成人免费观看 | jiizzyou欧美2 | 97在线播放免费观看 | 台湾佬综合网 | a级片黄色 | 中日韩精品一区二区三区 | 日本成人片在线 | 无人在线观看高清视频 单曲 | 欧美被狂躁喷白浆精品 | 伊人色在线 | 亚洲国产成人一区二区精品区 | 亚洲精品大全 | 天天视频色| 九九久久网 | 国产成人精品无码播放 | 成人夜晚视频 | 人禽高h交 | 福利在线免费视频 | 色性av| 国产性―交―乱―色―情人 | 人妖天堂狠狠ts人妖天堂狠狠 | 欧美午夜视频 | 熟妇无码乱子成人精品 | 欧美粗大猛烈 | 色综合av综合无码综合网站 | 日本美女黄色一级片 | 久久久亚洲av波多野结衣 | 少妇毛片一区二区三区 | 日韩精品第一页 | 成人在线视频免费播放 | 国产一区二区三区四区五区美女 | 一区二区三区免费网站 | 97青草 | 亚洲欧美日韩成人在线 | 韩国19主播内部福利vip | 黄色羞羞网站 | 国产精品成人一区二区三区 | 麻豆久久精品 | 久久久久一级片 | 日本人妻丰满熟妇久久久久久 | 欧日韩一区二区三区 | 美女伊人网 | 3级黄色片| 国内成人自拍视频 | 偷拍中国夫妇高潮视频 | 久久精品国产精品亚洲色婷婷 | 九一精品在线 | 精品人妻一区二区三区四区五区 | 日本美女全裸 | 97久久国产亚洲精品超碰热 | 中文字幕有码视频 | 高h大肚孕期孕妇play | 久久久久高潮 | 久久久久久久久久久网站 | 天堂网亚洲 | 日日噜噜噜夜夜爽爽狠狠 | 亚洲伦理在线视频 | 国产不卡在线播放 | 国产精品伊人久久 | 中文字幕人乱码中文字 | 在线观看av大片 |