`
vvaaiinn
  • 浏览: 21040 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

安卓解析xml格式字符串

 
阅读更多

最近实验室的安卓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;
	@Override
	public 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() {

			@Override
			public void onItemSelected(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				// TODO 自动生成的方法存根
				ToUser = drp[arg2];
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO 自动生成的方法存根
				
			}        	           	
        });
效果如下图。

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

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







分享到:
评论

相关推荐

    android pull解析xml源码

    在Android平台上基于Pull方式对XML文件进行解析

    Android代码-android-manifest-parser

    AndroidManifest.xml文件格式 Binary AndroidManifest.xml Magic Number(0x00080003) 4bytes // 魔数 File Size 4bytes // 文件长度 String Chunk // 字符串常量池 Chunk Type(0x001C0001) 4bytes // Chunk类型...

    本地化:将字符串转换为不同格式的应用程序

    特征: 在用户友好的界面中显示已解析的字符串使用多种格式: Android strings.xml及其占位符Apple Localizable.strings,包括其占位符CSV 下载链接:执照Copyright 2019 Rasul AghakishiyevLicensed under the ...

    Android 中对JSON数据解析实例代码

    Android 中对JSON数据解析  在Android的网络编程中,JSON是比XML使用更为...JSON保存的值可以是数字、字符串、布尔值、数组和对象。  废话少说,直接上代码。下面对以下JOSN进行解析: { language:[ { id:1,

    Android代码-MyUtils

    wifi操作工具、单位换算工具、zip压缩和解压操作工具、XML解析操作工具(只支持几种指定格式)、图片加载和处理工具,数据库操作(增删改查)工具。 V.1.1.7版本新增功能 FileSizeFormattingUtil 文件大小格式化...

    Android例子源码集成安卓主流优秀第三方组件框架.zip

    字符串操作工具类(ToolString.java),生成UUID、非空非NULL逻辑判断、生成MD5等常用共通方法 数据操作工具类(ToolData.java),自动递归获取表单数据封装成Map、本地数据分页共通方法等 图片操作工具类...

    SharedPreferences例子源码

    主要是保存一些常用的配置比如窗口状态,一般在Activity中重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长整形、Int整形、String字符串型的保存,它是什么样的...

    集成目前Android主流优秀第三方组件

    字符串操作工具类(ToolString.java),生成UUID、非空非NULL逻辑判断、生成MD5等常用共通方法 数据操作工具类(ToolData.java),自动递归获取表单数据封装成Map、本地数据分页共通方法等 图片操作工具类...

    MLang:Android 动态化多语言框架,支持语言包的动态下发、升级、删除,一处安装,到处使用

    设计优雅 语言包存储格式为 xml 格式,和 res 下的 strings.xml 一致 零依赖,完全使用系统 api 和系统的 xml 解析器 不持有 context,无内存泄漏 静态方法 + 单例模式,一处安装,到处使用动态化语言包 动态下发...

    Android集成主流优秀第三方组件框架

    字符串操作工具类(ToolString.java),生成UUID、非空非NULL逻辑判断、生成MD5等常用共 通方法 数据操作工具类(ToolData.java),自动递归获取表单数据封装成Map、本地数据分页共通方 法等 图片操作工具类...

    疯狂Android讲义源码

     6.2.2 定义字符串、颜色、尺寸资源  文件 218  6.2.3 使用字符串、颜色、  尺寸资源 219  6.3 数组(Array)资源 222  6.4 使用(Drawable)资源 225  6.4.1 图片资源 225  6.4.2 StateListDrawable资源 ...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    集成安卓主流优秀第三方组件框架.zip

    字符串操作工具类(ToolString.java),生成UUID、非空非NULL逻辑判断、生成MD5等常用共通方法 数据操作工具类(ToolData.java),自动递归获取表单数据封装成Map、本地数据分页共通方法等 图片操作工具类...

    Android中使用Gson解析JSON数据的两种方法

    从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如”北京”这个单独的词。 第二种类型是序列(sequence),也就是...

    疯狂Android讲义.part2

    6.2.2 定义字符串、颜色、尺寸资源 文件 218 6.2.3 使用字符串、颜色、 尺寸资源 219 6.3 数组(Array)资源 222 6.4 使用(Drawable)资源 225 6.4.1 图片资源 225 6.4.2 StateListDrawable资源 225 6.4.3 ...

    疯狂Android讲义.part1

    6.2.2 定义字符串、颜色、尺寸资源 文件 218 6.2.3 使用字符串、颜色、 尺寸资源 219 6.3 数组(Array)资源 222 6.4 使用(Drawable)资源 225 6.4.1 图片资源 225 6.4.2 StateListDrawable资源 225 6.4.3 ...

    Android开发资料合集--续

    95、Java替换字符串,不区分大小写 138 96、Java获得随机数 139 97、MD5加密 141 98、HTTP数据传输 141 从Internet获取数据 141 向Internet发送数据 143 99、Jason解析 146 100、广播 147 101、SQLite清空数据库 147...

    cethrepoh:用于生产应用程序和网站的通用拼写检查器。 或您想要的任何来源

    目前这是早期阶段,但我希望在接下来的几个月里改进这一点,当我有时间包括扫描网站/Android 应用程序/iOS/BB10 等的能力或实际上任何可以解析并转换为字符串列表的功能时用户将阅读。 之后的下一阶段是使用一些 ...

Global site tag (gtag.js) - Google Analytics