最近实验室的安卓app需要实现发内部邮件的功能。

说白了就是简单的数据库的增删处理。

但是中间的一部分有意思的就是获取收件人的列表的处理。

用户在登录APP的时候,如果验证成功,服务器则把数据的联系人的所有信息发送回来到客户端。

发送出来的格式是dataset,处理之后转换为xml格式的字符串发出来。

当发邮件的时候 ,则会在收件人提供一个Spinner控件,然后把所有人的名字显示出来。

这个时候就涉及到xml格式的字符串的解析。

我的实现方法很简单。用的是PULL方法。希望能够帮助到需要的同学。

首先看服务器端发回的字符串格式

<span style="font-size:18px;"><NewDataSet><ds><UserName>admin</UserName></ds><ds><UserName>王涵杨</UserName></ds><ds><UserName>陈鹏</UserName></ds><ds><UserName>谢永军</UserName></ds><ds><UserName>陈旻</UserName></ds><ds><UserName>姜川</UserName></ds><ds><UserName>刘渊</UserName></ds><ds><UserName>范玮</UserName></ds><ds><UserName>赵靖</UserName></ds><ds><UserName>黄大为</UserName></ds><ds><UserName>徐兰</UserName></ds><ds><UserName>赵金扎</UserName></ds><ds><UserName>宁云霞</UserName></ds><ds><UserName>贾慧</UserName></ds><ds><UserName>王瑞</UserName></ds><ds><UserName>李春艳</UserName></ds><ds><UserName>李婷</UserName></ds><ds><UserName>康健麒</UserName></ds><ds><UserName>折超颖</UserName></ds><ds><UserName>刘亮</UserName></ds><ds><UserName>庞晓芳</UserName></ds><ds><UserName>邬录</UserName></ds><ds><UserName>邬兆轩</UserName></ds><ds><UserName>石进</UserName></ds><ds><UserName>张振龙</UserName></ds><ds><UserName>王彦军</UserName></ds><ds><UserName>撖泽雨</UserName></ds><ds><UserName>杨杰</UserName></ds><ds><UserName>杜丹</UserName></ds><ds><UserName>赵小燕</UserName></ds><ds><UserName>赵慧</UserName></ds><ds><UserName>鲁星宇</UserName></ds><ds><UserName>田宝凤</UserName></ds><ds><UserName>王玲</UserName></ds><ds><UserName>刘轶群</UserName></ds><ds><UserName>贺艳</UserName></ds><ds><UserName>温晔</UserName></ds><ds><UserName>侯丽枝</UserName></ds><ds><UserName>刘源</UserName></ds><ds><UserName>王庆伟</UserName></ds><ds><UserName>王旭</UserName></ds><ds><UserName>洪雪松</UserName></ds><ds><UserName>张巧平</UserName></ds><ds><UserName>李瑞霞</UserName></ds><ds><UserName>李倩</UserName></ds></NewDataSet></span>

就是数据库中所有人的姓名。

然后客户端接受到这个字符串。同时写入到SharedPreferences中保存。

在发邮件的时候,读取SharedPreferences的姓名,并转换。

读取姓名:

<span style="font-size:18px;">private SharedPreferences info;
private String peoInfo;
</span>
<span style="font-size:18px;">info = getSharedPreferences("info", 0);
peoInfo = info.getString("info","");</span>
<span style="font-size:18px;">ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(peoInfo.getBytes());<span style="white-space:pre">   </span>//转为流
</span>

xml字符串处理,首先声明一个接口InfoParse.java:

<span style="font-size:18px;">public interface InfoParse {public ArrayList<String> parse(InputStream is) throws Exception;}</span>

返回ArrayList;

接着实现接口PullInfo.java:

<span style="font-size:18px;">public class PullInfo implements InfoParse {ArrayList<String> info = new ArrayList<String>() ;String temp =null;@Overridepublic ArrayList<String> parse(InputStream is)throws Exception {// TODO 自动生成的方法存根XmlPullParser parser = Xml.newPullParser(); //由android.util.Xml创建一个XmlPullParser实例  parser.setInput(is, "UTF-8");  int eventType = parser.getEventType();  while (eventType != XmlPullParser.END_DOCUMENT){switch (eventType) {   case XmlPullParser.START_DOCUMENT: temp = null;break;case XmlPullParser.START_TAG:  if (parser.getName().equals("UserName")) {  eventType = parser.next();  temp = parser.getText();                     }break;case XmlPullParser.END_TAG:  if (parser.getName().equals("ds")) {  info.add(temp);     }  break;    }eventType = parser.next();              }
<span style="white-space:pre"> </span>return info;
<span style="white-space:pre"> </span>}</span>
<span style="font-size:18px;">}</span>

因为有字符串看出来,只有ds一个标签里的内容需要识别。至于其他的标签,请自行添加判断条件。

最后在发邮件的里面写上

<span style="white-space:pre"><span style="font-size:18px;">   InfoParse parser = null;
</span></span>
<pre name="code" class="java"><span><span style="font-size:18px;">    ArrayList<String> peoName  = new ArrayList<String>();</span></span>

String drp[];

<span style="font-size:18px;"><span style="white-space:pre">   </span>try {          parser = new PullInfo();peoName =  parser.parse(tInputStringStream);int size = peoName.size();drp = new String[size];for(int i = 0 ;i < size ; i ++){drp[i] = (String)peoName.get(i);}} catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();}</span>

这样解析之后,都存在字符串数组drp中。

至于绑定,可以参考如下

private Spinner type;
private ArrayAdapter<String> adapter;type = (Spinner)findViewById(R.id.type);type.setPadding(15,0,0,0);adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,drp);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);type.setAdapter(adapter);
type.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {// TODO 自动生成的方法存根ToUser = drp[arg2];}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {// TODO 自动生成的方法存根}                       });

效果如下图。

吐槽一句:自学安卓不到1个月的大三狗,没有美工,只有一人做安卓APP、

o(︶︿︶)o 唉~  将就看吧~

安卓解析xml格式字符串相关推荐

  1. 解析xml格式字符串

    解析xml格式字符串 由于写接口时,总有人会传一些xml格式的字符串,节点少时可以一一获取,但是如果有大量的子节点时,可以使用反射机制实现实体类接收xml格式字符串数据,只需要保证节点名称和实体类字段 ...

  2. dom4j解析xml格式字符串获取标签属性和内容

    /*** 解析xml字符串,获取各项属性内容* readXML方法描述:* * @author : gc* @createTime : 2019-4-26 下午4:37:50*/private sta ...

  3. java后台解析xml格式字符串

    背景: 在调用京东万象的短信接口的时候,它返回的是json格式的字符串,使用的是京东万象的106短信 接口(https://wx.jdcloud.com/market/datas/5/10306) 解 ...

  4. Java 中解析 xml 格式字符串的数据

    解析 xml 格式中的字符串数据 相信有很多小伙伴经历过接口返回的数据是在一段 xml 字符串格式的数据里,那么我们可用什么最快最便捷的方法取到里面的数据勒? 下面这里是一个xml 格式的是实例 这里 ...

  5. python xml字符串_python -解析字符串,并返回xml格式字符串 急该如何解决

    python --解析字符串,并返回xml格式字符串 急急急. str = """Registrations: ============================= ...

  6. C# 将XML格式字符串,写入数据集的表中 XML解析

    将XML格式字符串,写入数据集的表1中 命名空间:using System.Xml;             string strRead;//strRead为以下xml值 XmlDocument x ...

  7. java jdom格式_Java全面解析XML格式串(JDOM解析)

    搜索热词 Java全面解析XML格式串(JDOM解析) import java.io.IOException; import java.io.StringReader; import java.uti ...

  8. oracle怎么从大字段中取节点,Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值...

    参照: Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串 背景:在写存储过程时,需要获取表单提交的信息.表单信息是以xml格式的字符串存储在colb类型的字段dataxml中,如 ...

  9. iOS开发之解析XML格式数据

    XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用 ...

最新文章

  1. python怎么样才算入门编程-编程零基础应当如何开始学习 Python?
  2. MySQL模糊查询—like关键字
  3. 模板模式在源码中的体现
  4. selenium java 断言_Java+Selenium+Testng自动化测试学习(三)— 断言
  5. 2021“MINIEYE杯”中国大学生算法设计超级联赛(4)Display Substring(后缀数组+二分)
  6. MTK 驱动---(11) EMI定制
  7. win8系统如何开服务器,Win8.1怎么打开IIS服务器?Win8.1专业版64位系统中打开IIS服务器的方法...
  8. 【Oracle】redo与undo
  9. 二元logistic回归前的单因素分析
  10. 小程序在政务服务平台建设中如何发挥价值
  11. Java23种设计模式——2.创建型模式之原型模式
  12. 计算机基础知识考点合集
  13. 关于模型训练的时候所需要的GPU显存的计算以及模型参数,计算量的计算
  14. ADB安装电视应用市场
  15. 编程新手表示很想知道JAVA中Bean是什么?
  16. 世卫批准强生新冠疫苗紧急使用权;美洲邮轮业停摆一年后将复航;IMAX将入驻上海多个商业地标 | 美通企业周刊...
  17. 酷链网络——新一代去中心化分布式公有链平台
  18. 人脸性别转换APP有什么?快把这些APP收好
  19. 信也科技股权曝光:顾少丰持股29.4% 有63.7%投票权
  20. flash download failed 问题解决

热门文章

  1. 捅了“蚂蚁窝”?怎么大家都在唱《蚂蚁呀嘿》
  2. 智汀智能家居普及篇——智能家居必备的功能控制系统
  3. “已连接,但无法访问互联网”开机后wifi有感叹号, 时间无法同步解决办法
  4. 腾讯开源推理框架TNN Android编译不通过
  5. skylin TerraExplorer自定义飞行路线如何监听结束事件
  6. Qt入门教程【QObject篇】属性系统
  7. 什么是API网关, API 网关的作用
  8. html桌面转手机,教程:让你的手机桌面瞬间高逼格!
  9. 分享15个英文SEO长尾关键词挖掘分析工具
  10. 【传智播客郑州校区】辞掉7年工作转行程序员,为了理想在传智播客前行