android中数据存储及对xml的解析

android中数据存储及对xml的解析
android中数据存储及对xml的解析

android中数据存储及对xml的解析

这几天恶补了一下XML解析,还是不够透彻呀,还是先打个钉吧。。。

XML作为一种业界公认的数据交换格式,在各个平台与语言之上,都有广泛使用和实现。

其标准型,可靠性,安全性......毋庸置疑。在android平台上,我们要想实现数据存储和数据交换,经常会使用到xml数据格式和xml文件。

小提示:android中存储数据一般有如下几种:SharedPreferences(参数化),XML文件,sqllite数据库,网络,ContentProvider(内容提供者)等。

在android中,操作xml文件,一般有几种方式:SAX操作,Pull操作,DOM操作等。其中DOM的方式,可能是大家最熟悉的,也是符合W3C标准的。

1)

在java平台中,有诸如DOM4J这样优秀的开源包,极大程度的方便大家使用DOM 标准来操作XML文件。在javascript中,不同的浏览器解析引擎,对DOM的解析和操作也略有差异(不过这不是本章介绍的重点)。而DOM的方式,也有其缺点。通常一次性加载xml文件,再使用DOM的api去进行解析,这样很大程度的消耗内存,对性能会有一定影响。而我们的android手机,虽然配置在不断的升级,但是内存方面,暂时还无法与传统的PC去媲美。所以,在android开发中,个人不太推荐使用DOM的方式来解析和操作XML。

[java] view plaincopy

package cn.itcast.service;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import cn.itcast.model.Person;

public class DomPersonService {

public ListgetPersons(InputStream stream) throws Throwable

{

Listlist =new ArrayList();

DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();

DocumentBuilder builder =factory.newDocumentBuilder();

Document dom = builder.parse(stream);//解析完成,并以dom树的方式存放在内存中。比较消耗性能

//开始使用dom的api去解析

Element root = dom.getDocumentElement();//根元素

NodeList personNodes = root.getElementsByTagName_r("person");//返回所有的person 元素节点

//开始遍历啦

for(int i=0;i< p>

{

Person person =new Person();

Element personElement =(Element)personNodes.item(i);

person.setId(new Integer( personElement.getAttribute("id")));//将person元素节点的属性节点id的值,赋给person对象

NodeList personChildrenNodes =personElement.getChildNodes();//获取person节点的所有子节点

//遍历所有子节点

for(int j=0;j< p>

{

//判断子节点是否是元素节点(如果是文本节点,可能是空白文本,不处理)

if(personChildrenNodes.item(j).getNodeType()==Node.ELEMENT_NODE)

{

//子节点--元素节点

Element childNode =(Element)personChildrenNodes.item(j);

if("name".equals(childNode.getNodeName()))

{

//如果子节点的名称是“name”.将子元素节点的第一个子节点的值赋给person对象

person.setName(childNode.getFirstChild().getNodeValue());

}else if("age".equals(childNode.getNodeValue()))

{

person.setAge(new Integer(childNode.getFirstChild().getNodeValue()));

}

}

}

list.add(person);

}

return list;

}

}

2)

SAX(Simple API for XML),是一个使用非常广泛的XML解析标准,通常使用Handler模式来处理XML文档,这种处理模式和我们平常习惯的理解方式很不同,身边也经常有一些朋友在刚接触SAX的时候会觉得理解起来有些困难。其实SAX 并不复杂,只不过是换了一种思维方式,正如它的名字所表示的,为了让我们以更简单的方式来处理XML文档,下面我们就开始吧。

[java] view plaincopy

package cn.itcast.service;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import cn.itcast.model.Person;

public class SAXPersonService {

public ListgetPersons(InputStream inStream) throws Throwable

{

SAXParserFactory factory = SAXParserFactory.newInstance();//工厂模式还是单例模式?

SAXParser parser =factory.newSAXParser();

PersonParse personParser =new PersonParse();

parser.parse(inStream, personParser);

inStream.close();

return personParser.getPerson();

}

private final class PersonParse extends DefaultHandler

{

private Listlist = null;

Person person =null;

private String tag=null;

public ListgetPerson() {

return list;

}

@Override

public void startDocument() throws SAXException {

list =new ArrayList();

}

@Override

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

if("person".equals(localName))

{

//xml元素节点开始时触发,是“person”

person = new Person();

person.setId(new Integer(attributes.getValue(0)));

}

tag =localName;//保存元素节点名称

}

@Override

public void endElement(String uri, String localName, String qName) throws SAXException {

//元素节点结束时触发,是“person”

if("person".equals(localName))

{

list.add(person);

person=null;

}

tag =null;//结束时,需要清空tag

}

@Override

public void characters(char[] ch, int start, int length) throws SAXException {

if(tag!=null)

{

String data = new String(ch,start,length);

if("name".equals(tag))

{

person.setName(data);

}else if("age".equals(tag))

{

person.setAge(new Integer(data));

}

}

}

}

3)

Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有(1)pull读取xml文件后触发相应的事件调用方法返回的是数字(2)pull可以在程序中控制想解析到哪里就可以停止解析。

[java] view plaincopy

package cn.itcast.service;

import java.io.InputStream;

import java.io.Writer;

import java.util.ArrayList;

import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

import cn.itcast.model.Person;

public class PullPersonService {

//保存xml文件

public static void saveXML(Listlist,Writer write)throws Throwable

XmlSerializer serializer =Xml.newSerializer();//序列化

serializer.setOutput(write);//输出流

serializer.startDocument("UTF-8", true);//开始文档

serializer.startTag(null, "persons");

//循环去添加person

for (Person person : list) {

serializer.startTag(null, "person");

serializer.attribute(null, "id", person.getId().toString());//设置id属性及属性值serializer.startTag(null, "name");

serializer.text(person.getName());//文本节点的文本值--name

serializer.endTag(null, "name");

serializer.startTag(null, "age");

serializer.text(person.getAge().toString());//文本节点的文本值--age serializer.endTag(null, "age");

serializer.endTag(null, "person");

}

serializer.endTag(null, "persons");

serializer.endDocument();

write.flush();

write.close();

}

public ListgetPersons(InputStream stream) throws Throwable {

Listlist =null;

Person person =null;

XmlPullParser parser =Xml.newPullParser();

parser.setInput(stream,"UTF-8");

int type =parser.getEventType();//产生第一个事件

//只要当前事件类型不是”结束文档“,就去循环

while(type!=XmlPullParser.END_DOCUMENT)

{

switch (type) {

case XmlPullParser.START_DOCUMENT:

list = new ArrayList();

break;

case XmlPullParser.START_TAG:

String name=parser.getName();//获取解析器当前指向的元素名称if("person".equals(name))

{

person =new Person();

person.setId(new Integer(parser.getAttributeValue(0)));

}

if(person!=null)

{

if("name".equals(name))

{

person.setName(parser.nextText());//获取解析器当前指向的元素的下一个文本节点的文本值

}

if("age".equals(name))

{

person.setAge(new Integer(parser.nextText()));

}

}

break;

case XmlPullParser.END_TAG:

if("person".equals(parser.getName()))

{

list.add(person);

person=null;

}

break;

}

type=parser.next();//这句千万别忘了哦}

return list;

}

}

Android下基于XML的Graphics shape使用方法

Android下基于XML的Graphics shape使用方法 2011-05-30 10:47 Android下基于XML的Graphics 以前作图,一般有两种方式,首先是UI把图形设计好,我们直接贴,对于那些简单的图形,如矩形、扇形这样的图 形,一般的系统的API会提供这样的接口,但是在Android下,有第三种画图方式,介于二者之间,结合二者的长处,如 下的代码: Java 代码

这是一个Progress的style里面的代码,描述的是进度条的为达到的图形,原本以为这是一个图片,后来仔细的跟踪代码,发现居然是xml,像这种shape corners gradient等等这还是第一次碰到。shape 表示是一个图形,corners表示是有半径为5像素的圆角,然后,gradient表示一个渐变。这样作图简单明了,并且可以做出要求很好的图形,并且节省资源Java 代码 gradient 产生颜色渐变android:angle从哪个角度开始变貌似只有90的整数倍可以 android:shape="rectangle" 默认的也是长方形

android解析xml文件的方式--PULL

我们使用SAX方式解析xml文档,SAX方式是基于事件驱动的。当然android的事件机制是基于回调函数的。在这一节中,我们用另外一种方式解析xml文档,这种方式也是基于事件驱动的,与SAX方式一样,它就是PULL方式。只不过PULL方式读xml回调方法返回的是数字。 读取到xml的声明返回START_DOCUMENT; 读取到xml的结束返回 END_DOCUMENT ; 读取到xml的开始标签返回START_TAG 读取到xml的结束标签返回END_TAG 读取到xml的文本返回TEXT xml数据结果还是采用我们先前使用的river.xml文件。 采用PULL方式与SAX大同小异,重点在于我们需要知道导航到什么标签时候做什么就行了,依据上一节SAX处理方式的思路,我们也可以在这一节中一样处理,基本方法是: 基本处理方式是:当PULL解析器导航到文档开始标签时就开始实例化list集合用来存贮数据对象。导航到元素开始标签时回判断元素标签类型,如果是river标签,则需要实例化River对象了,如果是其他类型,则取得该标签内容并赋予River对象。当然它也会导航到文本标签,不过在这里,我们可以不用。 根据以上的解释,我们可以得出以下处理xml文档逻辑: 1:当导航到XmlPullParser.START_DOCUMENT,可以不做处理,当然你可以实例化集合对象等等。 2:当导航到XmlPullParser.START_TAG,则判断是否是river标签,如果是,则实例化river对象,并调用getAttributeValue方法获取标签中属性值。 3:当导航到其他标签,比如Introduction时候,则判断river对象是否为空,如不为空,则取出Introduction中的内容,nextText方法来获取文本节点内容 4:当然啦,它一定会导航到XmlPullParser.END_TAG的,有开始就要有结束嘛。在这里我们就需要判读是否是river结束标签,如果是,则把river对象存进list集合中了,并设置river对象为null. 由以上的处理逻辑,我们可以得出以下代码: View Code public List parse(String xmlPath){ List rivers=new ArrayList(); River river=null; InputStream inputStream=null; //获得XmlPullParser解析器 XmlPullParser xmlParser = Xml.newPullParser(); try { //得到文件流,并设置编码方式 inputStream=this.context.getResources().getAsse ts().open(xmlPath); xmlParser.setInput(inputStream, "utf-8");

android 中对xml 进行解析

DOM解析器是通过将XML文档解析成树状模型并将其放入内存来完成解析工作的,而后对文档的操作都是在这个树状模型上完成的。这个在内存中的文档树将是文档实际大小的几倍。这样做的好处是结构清除、操作方便,而带来的麻烦就是极其耗费系统资源。而SAX正好克服了DOM的缺点,分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。 选择DOM 还是选择SAX,这取决于下面几个因素: 应用程序的目的:如果打算对数据作出更改并将它输出为XML,那么在大多数情况下,DOM 是适当的选择。并不是说使用SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。 数据容量:对于大型文件,SAX 是更好的选择。 数据将如何使用:如果只有数据中的少量部分会被使用,那么使用SAX 来将该部分数据提取到应用程序中可能更好。另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么SAX 也许不是恰当的选择。 对速度的需要:SAX 实现通常要比DOM 实现更快。 基于上面的分析,在基于Android系统的内存和CPU资源比较有限的手持设备上,只要我们不需要修改XML数据或者随机的访问XML数据,SAX尽管可能需要更多的编码工作,但是为了更小的内存和CPU 消耗,还是值得的。 另外,Android SDK中已经包含了JAXP对应的javax.xml.parsers包,和SAX对应org.xml.sax(当然DOM对应的org.w3c.dom包也包含在内),加上Android还提供了android.sax这样的包来方便SAX Handle的开发,基于JAXP和SAX这样的标准方法来开发不仅复杂度不高,即使出现问题在讨论组中寻求解决方案也是比较容易的。 android 中的xml解析应该是和java中一条道路主要分为sax 解析和的Dom 解析。 如下的介绍的相关的包和类均为android 环境下: sax解析对应为: org\xml\sax 包:xml解析 javax.xml.parsers.SAXParserFactory javax.xml.parsers.SAXParser 两个主要用于SAXParser的上下文建立

XML布局文件

XML布局文件 XML布局文件是android系统中定义视图的常用方法,所有的xml文件必须保存在res/layout目录中。 (1)XML布局文件的命名及注意事项。 XML布局文件的扩展名必须是xml。 XML布局文件必须符合Java变量名的命名规则。 每一个XML布局文件的根节点可以是任意的控件标签,如 ,。 为XML布局文件中的标签指定ID时需使用:@+id/somestring。(2)常用XML属性解析。 xmlns:android这是XML命名空间的声明,它是告诉Android的工具, 你将要涉及到公共的属性已被定义在XML命名空间。在每一个Android的布局文件的最外边的标签必须有这个属性。 android:layout_width这个属性定义了在屏幕上这个View可用的宽度是多少。 android:layout_height这个属性定义了在屏幕上这个View可用的高度是多少。 android:text设置TextView所包含的文本内容,当前设置为”Hello, Android”信息 共有属性: java代码中通过btn1关联次控件 android:id="@+id/btn1" 控件宽度 android:layout_width="80px" //"80dip"或"80dp" android:layout_width =“wrap_content” android:layout_width =“match_parent” 控件高度 android:layout_height="80px" //"80dip"或"80dp" android:layout_height =“wrap_content” android:layout_height =“match_parent” 控件排布

Android SAX 方式解析XML 字符串

这个是主类: import java.io.StringReader; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class ParsingXML extends Activity { private final String MY_DEBUG_TAG = "WeatherForcaster"; public void onCreate(Bundle icicle) { super.onCreate(icicle); TextView tv = new TextView(this); String xml = "aHR0cDovLzE5Mi4xNjguMTA0LjExMy9ldW1zL2NsaWV udC90ZW1 wbGF0ZTIwMDA vbW9iaWxlZW50cnkucGhwP3VzZXJuYW1lPWNlc2hp"; // 创建一个新的字符串 StringReader read = new StringReader(xml); // 创建新的输入源SAX 解析器将使用InputSource 对象来确定如何读取XML 输入 InputSource source = new InputSource(read); try { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); ExampleHandler myExampleHandler = new ExampleHandler(); xr.setContentHandler(myExampleHandler); xr.parse(source); ParsedExampleDataSet parsedExampleDataSet = myExampleHandler .getParsedData(); String url=Base64Coder.decodeString(parsedExampleDataSet.toString()); tv.setText(url); } catch (Exception e) { tv.setText("Error: " + e.getMessage()); Log.e(MY_DEBUG_TAG, "WeatherQueryError", e); } this.setContentView(tv); } } 下面两个类是以SPX 方式解析XML字符串

AndroidManifest.xml配置文件详解

AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅。下面是一个标准的AndroidManifest.xml文件样例。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. . . . 33. 34. 35. 36. 37. 38. . . . 39. 40.

AndroidManifest.xml详解

用户是否能选择自行清除数据,默认为true,程序管理器包含一个选择允许用户清除数据。当为true时,用户可自己清理用户数据,反之亦然 B、android:allowTaskReparenting('true' or 'false') 是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务。关于此的更多内容请参考《Task和Activity相关的一些属性》 C、android:backupAgent 这也是Android2.2中的一个新特性,设置该APP的备份,属性值应该是一个完整的类名,如com.project.TestCase,此属性并没有默认值,并且类名必须得指定(就是个备份工具,将数据备份到云端的操作) D、android:debuggable 这个从字面上就可以看出是什么作用的,当设置为true时,表明该APP在手机上可以被调试。默认为false,在false的情况下调试该APP,就会报以下错误: Device XXX requires that applications explicitely declare themselves as debuggable in their manifest. Application XXX does not have the attribute 'debuggable' set to TRUE in its manifest and cannot be debugged. E、android:description/android:label 此两个属性都是为许可提供的,均为字符串资源,当用户去看许可列表(android:label)或者某个许可的详细信息(android:description)时,这些字符串资源就可以显示给用户。label 应当尽量简短,之需要告知用户该许可是在保护什么功能就行。而description可以用于具体描述获取该许可的程序可以做哪些事情,实际上让用户可以知道如果他们同意程序获取该权限的话,该程序可以做什么。我们通常用两句话来描述许可,第一句描述该许可,第二句警告用户如果批准该权限会可能有什么不好的事情发生 F、android:enabled Android系统是否能够实例化该应用程序的组件,如果为true,每个组件的enabled属性决定那个组件是否可以被enabled。如果为false,它覆盖组件指定的值;所有组件都是disabled。 G、android:hasCode('true' or 'false') 表示此APP是否包含任何的JAVA代码,默认为true,若为false,则系统在运行组件时,不会去尝试加载任何的APP代码 一个应用程序自身不会含有任何的代码,除非内置组件类,比如Activity类,此类使用了AliasActivity类,当然这是个罕见的现象 (在Android2.3可以用标准C来开发应用程序,可在androidManifest.xml中将此属性设置为false,因为这个APP本身已经不含有任何的JAVA代码了) H、android:icon 这个很简单,就是声明整个APP的图标,图片一般都放在drawable文件夹下 I、android:killAfterRestore

AndroidXML布局属性详解

各种Layout用到的一些重要的属性: 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent 相对于父元素完全居中 android:layout_alignParentBottom 贴紧父元素的下边缘 android:layout_alignParentLeft 贴紧父元素的左边缘 android:layout_alignParentRight 贴紧父元素的右边缘 android:layout_alignParentTop 贴紧父元素的上边缘 android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物 第二类:属性值必须为id的引用名“@id/id-name” android:layout_below 在某元素的下方 android:layout_above 在某元素的的上方 android:layout_toLeftOf 在某元素的左边 android:layout_toRightOf 在某元素的右边 android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐 android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐 android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐 android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐 第三类:属性值为具体的像素值,如30dip,40px android:layout_marginBottom 离某元素底边缘的距离 android:layout_marginLeft 离某元素左边缘的距离

AndroidManifest.xml文件详解

AndroidManifest.xml文件详解 每个应用程序在它的根目录中都必须要有一个AndroidManifest.xml文件。这个清单把应用程序的基本信息提交给Android系统,在应用程序的代码能够运行之前,这个信息系统必须建立。以下是清单文件要做的一些事情: 1.用Java包给应用程序命名。这个包名是应用程序的唯一标识; 2.描述应用程序的组件---组成应用程序的Activity、Service、Broadcast Receiver以及Content Provider。它要用每个组件的实现类来命名,并向外发布对应组件功能(例如,组件所能处理的Intent消息)。这些声明会让Android系统了解应用程序中组件,以及这些组件被加载的条件。 3.判断哪些进程是主应用程序组件。 4.声明应用程序所必须的权限,以便能够访问被保护的API,以及能够跟其他应用程序进行交互。 5.为了跟应用程序组件进行交互,还声明了其他要求有的权限。 6.列出了能够提供应用程序运行时的分析和其他信息的Instrumentation类。只有在开发和测试应用程序时才在清单文件中声明这些类,在应用程序被发布之前,要删除这些类。 7.声明应用程序所要求的最小的Android API级别。 8.列出应用程序必须链接的外部库。 Manifest文件的结构 下图中包含了清单文件的一般性结构,并且包含所有能包含的元素。每个元素所带有的全部元素会在它们各自的文档中介绍。

Android读写XML

Android读写XML(上)——package说明收藏 注明:本文转自https://www.360docs.net/doc/292355340.html,. XML 经常用作Internet 上的一种数据格式,其文件格式想必大家都比较清楚,在这里我结合Android平台,来说明Android SDK提供的读写XML的package。 首先介绍下Android SDK与Java SDK在读写XML文件方面,数据包之间的关系。Android 平台最大的一个优势在于它利用了Java 编程语言。Android SDK 并未向标准Java Runtime Environment (JRE) 提供一切可用功能,但它支持其中很大一部分功能。Java 平台支持通过许多不同的方式来使用XML,并且大多数与XML 相关的Java API 在Android 上得到了完全支持。举例来说,Java 的Simple API for XML (SAX) 和Document Object Model (DOM) 在Android 上都是可用的,这些API 多年以来一直都是Java 技术的一部分,较新的Streaming API for XML (StAX) 在Android 中并不可用。但是,Android 提供了一个功能相当的库。最后,Java XML Binding API 在Android 中也不可用,这个API 已确定可以在Android 中实现。Android SDK提供了如下package来支持XML的读写: 额外补充说明下,在android.util数据包中也提供了一个类Xml,不过这个类就是把以上package简单封装了下。 读取XML主要有2种方法:DOM与SAX(Simple API for XML),在这里对这2种方法分别加以说明。 DOM(文档对象模型),为XML文档的解析定义了一组接口,解析器读入整个文档,然后构造一个驻留内存的树结构,然后代码就可以使用DOM接口来操组整个树结构,其他点如下: ?优点:整个文档树都在内存当中,便于操作;支持删除、修改、重新排列等多功能。?缺点:将整个文档调入内存(经常包含大量无用的节点),浪费时间和空间。 ?使用场合:一旦解析了文档还需要多次访问这些数据,而且资源比较充足(如内存、CPU等)。 为了解决DOM解析XML引起的这些问题,出现了SAX。SAX解析XML文档为事件驱动,详细说明请阅读Android读写XML(中)–SAX。当解析器发现元素开始、元素结束,文本、文档的开始或者结束时,发送事件,在程序中编写响应这些事件的代码,其特点如下: ?优点:不用事先调入整个文档,占用资源少。尤其在嵌入式环境中,极力推荐采用SAX进行解析XML文档。

android界面UI之代码布局(不依赖layout下的xml文件)

android界面UI之代码布局 用代码来进行界面UI布局很繁琐,好处只能说是会熟悉组件的方法,另外对于有规律性的组件布局可以通过循环来减少代码的写作量。 一般来讲,一个Activity就是一个可视的人机交互界面。每一个Activity都有一个默认的Window(该Window在Activity的attach方法中通过调用PolicyManager.makeNewWindo 创建),一般来讲,这个Window都是全屏的,当然也有例外,比如Dialog的Window就是非全屏的。Activity也可以利用默认Window以外的其它的Window。要想新创建一个窗口,可以调用WindowManager的addView方法,作为参数的view将作为在该窗口上显示的根view。Window上可以布设若干个view,但其中只有一个view称为根view。 Window表示一个窗口,含一个View tree和窗口的layout 参数。View tree的root View 可以通过getDecorView得到。拥有它自己的一些属性,如标题栏。通过上面的介绍,也可以看出必须在布设view前设置好windows的属性。 View是最基本的UI组件,表示屏幕上的一个矩形区域,Window里可见的内容,就是一层一层的View。 对于用layout中的xml文件来进行布局的方式,在常规的activity下是使用方法setContentView(int layoutResID)来将xml的内容解析成一个基本的View加载到window上,这个view就是本窗口的root view。View中的各个组件的相对位置和参数属性在xml中进行设置。具体的属性说明可以参考下面的这篇文章。 如果不采用xml的话,同样也可以在java文件中动态的布置视图view。 在普通activity下布置的代码逻辑为: 1:设置最基础的Layout对象实例作为根View; 2:对于组件child,先设置组件甲相对于其父view的LayoutParams属性params,然后再设置组件child本身的属性,最后父view调用addview(View child, LayoutParams params)即可将组件甲动态地加入父view中。 以下是一段样例代码: initWelPage 是作为根view的RelativeLayout对象,TextView类型的组件ady_gentle动态加载到initWelPage 的左上位置。 initWelPage = new RelativeLayout(_context);

Android APP开发期末复习资料

1.短信的内容提供者是() A. ContactProvider B. MessageProvider C. SmsProvider D. TelephonyProvider 2.以下是Android中用于xml解析方式的是()。 A. SAX B. DOM C. XmlPullParser D. Juint 3.下列选项中,关于Bitmap类描述正确的是()。 A. Bitmap类表示画 B. Bitmap类代表画布 C. Bitmap类是最常用的绘图类 D. Bitmap类表示位图工厂 4.Dalvik虚拟机是基于()的架构。 A.栈 B.堆 C. 寄存器 D. 存储器 5.在Android UI开发中,常见的刮刮卡是通过()实现的。 A.FrameLayout B.LinearLayout C.RelativeLayout D.TableLayout 6.注册一个短信到来的广播事件需要在清单文件配置什么权限()。 A. B. C. D. 7.关于服务的创建说法错误的是()。 A. Android中创建服务需要继承Service类 B. Android 中的服务需要在清单文件配置。

Android解析xml文件的3种方式

android解析xml文件的方式 android解析xml文件的方式(其一) 在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xml,xml是与平台无关的特性,被广泛运用于数据通信中,那么在android中如何解析xml文件数据呢? 通常有三种方式:DOM,SAX,PULL 在这一节中我们使用DOM方式来处理。 DOM方式解析xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据的,但是这样一来,如果xml文件很大呢?手机CPU处理能力当然不能与PC 机器比,因此在处理效率方面就相对差了,当然这是对于其他方式处理xml文档而言。 解析xml文档,当然必须有xml文档文件啦,下面是一个参考river,放在assets目录.如下: 灵渠在广西壮族自治区兴安县境内,是世界上最古老的运河之一,有着“世界古代水利建筑明珠”的美誉。灵渠古称秦凿渠、零渠、陡河、兴安运河,于公元前214年凿成通航,距今已2217年,仍然发挥着功用。 https://www.360docs.net/doc/292355340.html,/baike/pic/item/389aa8fdb7b8322e08244d3c.jpg 胶莱运河南起黄海灵山海口,北抵渤海三山岛,流经现胶南、胶州、平度、高密、昌邑和莱州等,全长200公里,流域面积达5400平方公里,南北贯穿山东半岛,沟通黄渤两海。胶莱运河自平度姚家村东的分水岭南北分流。南流由麻湾口入胶 州湾,为南胶莱河,长30公里。北流由海仓口入莱州湾,为北胶莱河,长100余公里。 https://www.360docs.net/doc/292355340.html,/baike/pic/item/389aa8fdb7b8322e08244d3c.jpg

XML解析的三种方法

三种解析XML文件的方法 在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。下面是本例子要解析的XML文件: 文件名称:china.xml 例子定义了一个javabean用于存放上面解析出来的xml内容,这个javabean为Person,代码:

使用SAX读取XML文件 SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。下面是一些ContentHandler接口常用的方法: startDocument() 当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。 endDocument() 和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。startElement(String namespaceURI, String localName, String qName, Attributes atts) 当读到一个开始标签的时候,会触发这个方法。namespaceURI就是命名空间,localName 是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。通过atts可以得到所有的属性名和相应的值。要注意的是SAX中一个重要的特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。这使得 SAX在编程处理上没有DOM来得那么方便。 endElement(String uri, String localName, String name) 这个方法和上面的方法相对应,在遇到结束标签的时候,调用这个方法。 characters(char[] ch, int start, int length) 这个方法用来处理在XML文件中读到的内容,第一个参数为文件的字符串内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就 可以获取内容。 下面是SAX事件的说明: 解析china.xml触发的事件为:

Android中XML属性与解析

Android界面的基本属性 布局: 在android中我们常用的布局方式有这么几种: 1.LinearLayout(线性布局):(里面只可以有一个控件,并且不能设计这个控件的位置,控件会放到左上角)线性布局分为水平线性和垂直线性二者的属性分别为: android:orientation="horizontal"android:orientation="vertical"。 2.RelativeLayout(相对布局):(里面可以放多个控件,但是一行只能放一个控件)附加几类RelativeLayout的属性供大家参考: 第一类:属性值为true或false android:layout_centerHrizontal android:layout_centerVertical android:layout_centerInparent android:layout_alignParentBottom android:layout_alignParentLeft android:layout_alignParentRight android:layout_alignParentTop android:layout_alignWithParentIfMissing 第二类:属性值必须为id的引用名“@id/id-name” android:layout_below android:layout_above android:layout_toLeftOf android:layout_toRightOf android:layout_alignTop android:layout_alignLeft android:layout_alignBottom android:layout_alignRight 第三类:属性值为具体的像素值,如30dip,40px android:layout_marginBottom android:layout_marginLeft android:layout_marginRight android:layout_marginTop 3.TableLayout(表格布局):(这个要和TableRow配合使用,很像html里面的table)这个

android_获取指定路径文件,xml存取图片,pull生成与解析xml,android.util.Base64

*********************************************************************** By : jcking 小菜鸟一枚,转载帮忙挂个名~ *********************************************************************** package king.testGetPic; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; import android.content.Context; import android.util.Base64; import android.util.Xml; import android.widget.Toast; public class getPicInfo { //路径是否存在 public boolean path_exist = true; //图片是否存在 public boolean pic_exist = true; /** * 获取指定路径所有图片文件及最后修改日期时间 * @param path 指定文件夹路径 * @param c * @return */ public ArrayList picInfoArrayList(String path,Context c){ ArrayList picFiles = new ArrayList(); File file = new File(path); //判断文件路径是否存在 if(file.exists()){

Android layout xml总结

此内容为网上的合集: Android包下面android.R.styleable类包含下面所有组件相关的XML属性。 如: public static final int[] LinearLayout_Layout https://www.360docs.net/doc/292355340.html,/zhip/archive/2011/01/25/343511.html 共有属性: java代码中通过btn1关联次控件 android:id="@+id/btn1" 控件宽度 android:layout_width="80px" //"80dip"或"80dp" android:layout_width =“wrap_content” android:layout_width =“match_parent” 控件高度 android:layout_height="80px" //"80dip"或"80dp" android:layout_height =“wrap_content” android:layout_height =“match_parent” 控件排布 android:orientation="horizontal” android:orientation="vertical“ 控件间距 android:layout_marginLeft="5dip" //距离左边 android:layout_marginRight="5dip" //距离右边 android:layout_marginTop="5dip" //距离上面 android:layout_marginRight="5dip" //距离下面 控件显示位置 android:gravity="center" //left,right, top, bottom android:gravity="center_horizontal" android:layout_gravity是本元素对父元素的重力方向。 android:layout_gravity属性则设置控件本身相对于父控件的显示位置android:gravity是本元素所有子元素的重力方向。 android:layout_gravity="center_vertical" android:layout_gravity="left" android:layout_gravity="left|bottom"

Android考试题库

一、单选题(共33题,共62分) 1、(2分) WebView中可以用来处理js中警示,确认等对话框的是(C) A.WebSettings B.WebViewClient C.WebChromeClient D.WebViewChrome 2、(2分) Android解析xml的方法中,将整个文件加载到内存中进行解析的是?(C) A、SAX B、PULL C、DOM D 、JSON 3、(2分)以下属于调用摄像头硬件的权限的是:( A ) A. B. C. D. 4、(1分) 使用Android系统进行拍照用到的类有:(D) A. SurfaceView B. SurfaceHolder C.Callback D. Camera 5、(2分)LocationManager获取位置信息的途径下列说法不正确的是(B ) A, GPS定位更精确,缺点是只能在户外使用 B, NETWORK通过基站和Wi- Fi信号来获取位置信息,速度较慢,耗电较少。 C,获取用户位置信息,我们可以使用其中一个,也可以同时使用两个。 D, GPS定位耗电严重,并且返回用户位置信息的速度远不能满足用户需求。 6、(2分) 在开发AppWidget窗口小部件时, 需要继承(D)类 A,AppWidgetReceiverB,AppWidgetConfigure C,AppWidgetManagerD,AppWidgetProvider 7、(4分)在AsyncTask中下列哪个方法是负责执行那些很耗时的后台计算工作的(C) A,runB,executeC,doInBackgroundD,onPostExecute 8、(2分)如果希望自定义TabHost标题部分的显示内容需要使用下列哪个方法(B)finalTabHosttabHost = getTabHost(); A,tabHost.addTab(tabHost.newTabSpec("tab1") B,setIndicator C,setContent(); D,setView 9、(2分)使用HttpUrlConnection实现移动互联时,设置读取超时属性的方法是(B) A、setTimeout() B、setReadTimeout() C、setConnectTimeout() D、setRequestMethod() 10、(1分)使用HttpURLConnection的Get方式请求数据时,下列哪个属性是必须设置的(B) A,connection.setDoOutput(true) B,connection.connect()

相关主题
相关文档
最新文档