怎么修改手机中的hosts文件方法

 更新时间:2016年9月20日 20:00  点击:1470
修改Android手机的hosts地址,需要对手机root,因为要修改system目录下的文件,文章最后面我们讲述了获取hosts列表的做法.

第一步:使用adb下载手机端的hosts文件,在Windows下打开命令提示行,切换到C:目录下。
C:>adb pull /system/etc/hosts
这样,便将手机端的hosts文件下载到Windows的C盘根目录下,先不要关闭命令提示行窗口。


第二步:复制https://smarthosts.googlecode.com/svn/trunk/hosts页面的所有内容,推荐使用notepad++打开下载回来的hosts文件,然后将内容粘贴到hosts文件中,保存。


第三步:在手机端打开rootexplorer,我想使用Android并且root过的手机都会有rootexplorer吧,打开后进入system目录,将权限更改为可读写。


第四步:切回到命令提示行窗口输入如下内容将hosts文件回传到手机中。
C:>adb push hosts /system/etc/

这里再介绍一下 如何获取hosts列表呢?

 

https://smarthosts.googlecode.com/svn/trunk/hosts
通过上面这个地址,本来这是一个开源项目,叫做smarthosts,但是已经出于某种原因停止更新了。
该程序也可以修改电脑上的hosts地址。

本文章来介绍一下Android手机开发之图片内存优化几点,有需要的朋友可参考。

1、将图片转化为缩略图再加载:

 代码如下 复制代码
1 BitmapFactory.Options options = new BitmapFactory.Options();
2 options.inSampleSize = 2;
3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options);

该段代码即是读取1.png的缩略图,长度、宽度都只有原图片的1/2。图片大小减少,占用的内存自然也变小了。这么做的弊端是图片质量变差,inSampleSize的值越大,图片的质量就越差。由于各手机厂商缩放图片的算法不同,在不同手机上的缩放图片质量可能会不同。笔者就遭遇过moto手机上图片缩放后质量可以接受,三星手机上同样的缩放比例,质量却差很多的情况。

 

2、用ARBG_4444颜色模式加载图片:

Android中有四种,分别是:

ALPHA_8:每个像素占用1byte内存

ARGB_4444:每个像素占用2byte内存

ARGB_8888:每个像素占用4byte内存

RGB_565:每个像素占用2byte内存

Android默认的颜色模式为ARGB_8888,这个颜色模式色彩最细腻,显示质量最高。但同样的,占用的内存也最大。

 代码如下 复制代码
1 BitmapFactory.Options options = new BitmapFactory.Options();
2 options.inPreferredConfig = Bitmap.Config.ARGB_4444;   
3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options);

以上代码即是将1.png以ARGB_4444模式读出。内存减少虽然不如第一种方法明显,但是对于大多数图片,看不出与ARGB_8888模式有什么差别。不过在读取有渐变效果的图片时,可能有颜色条出现。另外,会影响图片的特效处理。

 

3、调用图片的recycle()方法:

这个其实不是真正降低图片内存的方法。主要目的是标记图片对象,方便回收图片对象的本地数据。图片对象的本地数据占用的内存最大,而且与程序Java部分的内存是分开计算的。所以经常出现Java heap足够使用,而图片发生OutOfMemoryError的情况。在图片不使用时调用该方法,可以有效降低图片本地数据的峰值,从而减少OutOfMemoryError的概率。不过调用了recycle()的图片对象处于“废弃”状态,调用时会造成程序错误。所以在无法保证该图片对象绝对不会被再次调用的情况下,不建议使用该方法。特别要注意已经用setImageBitmap(Bitmap img)方法分配给控件的图片对象,可能会被系统类库调用,造成程序错误。

 

4、使用Matrix对象放大的图片如何更改颜色模式:

虽然使用Matrix对象放大图片,必定会耗费更多的内存,但有时候也不得不这样做。放大后的图片使用的ARGB_8888颜色模式,就算原图片是ARGB_4444颜色模式也一样,而且没有办法在放大时直接指定颜色模式。可以采用以下办法更改图片颜色模式。

 

 代码如下 复制代码
Matrix matrix = new Matrix();
float newWidth = 200;//图片放大后的宽度
float newHeight = 300;//图片放大后的长度
matrix.postScale(newWidth / img.getWidth(), newHeight/ img.getHeight());
Bitmap img1 = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);//得到放大的图片
img2 = img1.copy(Bitmap.Config.ARGB_4444, false);//得到ARGB_4444颜色模式的图片
img = null;
img1 = null;

这里比起原来的图片额外生成了一个图片对象img1。但是系统会自动回收img1,所以实际内存还是减少了。

 

本文章来介绍一下关于安卓(android)手机开发之环境搭建 HelloWord,有需要学习android手机开的朋友可以参考一下。

因为之前做了个安卓壁纸站所以我们突然想起了安卓手机开发了,下面来看我的安卓环境配置文章吧。

这次接触安卓环境,一切都很陌生;花了一个下午的时间,走了很多弯路,不过最终还是把环境搭成了。下面总结一下搭建步骤:

第一步:安装Java SDK
本文环境所用的Jdk“jdk-6u25-windows-i586.exe”,下载地址读者可以自行到Oracle官方网站上下载最新的安装程序。(参考地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u25-download-346242.html)。安装步骤就不再详细叙述了,这个说多了无意义。image
第二步:安装eclipse
本文使用的Eclipse是“eclipse-jee-indigo-SR2-win32.zip”,读者需要自行下载,文件大小212MB左右。image
第三步:安装android-sdk
官方参考文档(E文):http://developer.android.com/sdk/installing.html
首先下载回来安装包“android-sdk_r17-windows.zip”,image 将其解压到D:Program Filesandroid-sdk-windows目录。
第四步:安装安卓ADT
同样从http://developer.android.com下载回来for windows Eclipse Plugin的SDK“ADT-17.0.0.zip”安装包,最新的版本可能会比这个要新。直接覆盖到Eclipse安装程序的根目录下即可。image
第五步:联机更新下载安卓SDK库
首先打开image ,打开之后下图所示:image 。选择一个特定版本的SDK下载回来。根据您的网速可能需要等上3分到几个小时不等,比如我的网速比较慢,下载了2个多小时。我选择的安卓版本是image ,单击install packages开始联机
下载安装。
第六步:创建AVD
注:拥有android系统 手机的同学可以直接跳过了,直接看第七步吧(AVD非常耗CPU,我表示实在受不了了)。
AVD是什么玩意呢?“安卓仿真设备”,就是这个小机器人image ,打开之后选择“NEW”image 创建一个安卓仿真设备,什么是仿真设备呢?其实就是一个安卓手机模拟器。输入仿真设备名称和平台以及CPU类型,然后就可以创建了。如图:image
第七步:安卓手机(真机)安装
1.首先你需要到你的手机官网上下载一个合适的USB的驱动程序,比我的是Lenovo A500 我就直接用“豌豆荚”全自动将驱动程序安装好了。(此步骤必备,否则PC无法识别到你的设备,也就无法连接到USB调试模式)
2.在你的手机中打开以下开关:系统设置-->应用程序-->开发-->USB调试。选中它。
第八步:创建第一个AndRoid项目:HelloWord

1.启动image ,创建一个Android项目:helloandroid。添加一个类“HelloAndroid”,源码如下

 代码如下 复制代码

 package com.example.helloandroid;
 import android.app.Activity;
import android.os.Bundle;
 import android.widget.*;
public class HelloAndroid extends Activity { 
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
 tv.setText("Hello, Android");
setContentView(tv);
 }
}

2.点击image 按钮,在Run Configuration对话框中双击android application,进行如下设置:

image image (注:真机调试模式请选择红色圈框的选项,AVD调试器请选择下边的仿真设备。)

我用的是真机,所以会自动出现如下对话框,选择我的设备image

单击OK,我的手机屏幕已经可以看到“Hello,word”了,你的呢?

本文章分享一篇关于android手机开发之获取客户端手机号码程序有需要了朋友可以看看。
 代码如下 复制代码

/创建电话管理
           TelephonyManager tm = (TelephonyManager)
  //与手机建立连接
          StartActivity.this.getSystemService(Context.TELEPHONY_SERVICE);

  //获取手机号码
     String phoneNo=tm.getLine1Number();    

 

<!-- 添加权限 -->
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />

Android 3.0 平台上创建和解析 XML文章介绍给大家,有需要了同学可以看看。


为了使用本文中给出的示例,您需要安装和配置以下软件。请参见 参考资料 中的相关链接。

常用缩写词ADT: Android Development Tools,Android 开发工具
API: Application programming interface,应用程序编程接口
AVD: Android Virtual Device,Android 虚拟设备
DOM: Document object model,文档对象模型
IDE: Integrated Development Environment,集成开发环境
JSON: JavaScript Object Notation,JavaScript 对象表示法
SAX: Simple API for XML,XML 简易 API
SDK: Software Development Kit,软件开发包
UI: User Interface,用户界面
XML: Extensible Markup Language,可扩展标记语言
安装 Eclipse IDE。
安装针对 Eclipse 的 Android Development Tools (ADT)插件,它提供一组在 Eclipse 中开发 Android 应用程序的扩展。
下载并安装 Android SDK Platform,它提供用于开发 Android 应用程序的工具。
选择 Window > Android SDK 和 AVD Manager,在 Eclipse 中启动 Android SDK 和 AVD Manager。
在 Android SDK 和 AVD Manager 中创建一个 Android Virtual Device (AVD),它是 Android 的模拟器。
请为 AVD 选择 Platform 3.0 和 API 11。

创建一份 XML 文档

在这一节中,您将在 Android 上创建一份 XML 文档。第一步是创建一个 Android 项目。

在 Eclipse IDE 中选择 File > New。在 New 对话框中,选择 Android > Android Project。然后单击 Next。
在 New Android Project 窗口中,如 图 1 中所示,指定:
项目名称:CreatingXML
“构建目标” 复选框:Android Platform 3.0 和 API 11
属性:
应用程序名称:CreatingXML
包名称 :android.xml
选择创建活动:活动类 (CreatingXML)。一个活动代表一次用户交互。该类扩展了 Activity 类,为 UI 创建了一个窗口。
最低 SDK 版本:11

图 1. 为平台 3.0 创建一个 Android 项目
为平台 3.0 创建一个 Android 项目的屏幕截图

  1. 单击 Next。

    1. 单击 Finish。这样就创建好了一个用于创建 XML 文档的 Android 项目。Android 项目包含以下这些文件:
    2. 一个活动类 CreatingXML,它扩展了 Activity 类。
    • res/layout/main.xml 文件,它指定了 Android UI 组件的布局。
    • AndroidManifest.xml 文件,它包含应用程序配置,比如包名称,启动 Android 应用程序时启动的主要活动、应用程序组件、进程以及最低的 API 级别。
  • 图 2 显示了 Android 项目 CreatingXML 的目录结构。


    图 2. 用于创建 XML 文档的 Android 项目
    用于创建 XML 文档的 Android 项目的屏幕截图

    在 res/layout/main.xml 文件中,指定 Android UI 组件的布局。创建一个 LinearLayout,并将 android:orientation 设置为 vertical。在这个例子中,您将以文本消息的形式显示 XML 文档。添加一个 id 为 xmlresultTextView 元素,以显示 XML 文档,如 清单 1 中所示。


    清单 1. 布局文件 main.xml

    				
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical" android:layout_width="fill_parent"
         android:layout_height="fill_parent">
         <TextView android:id="@+id/xmlresult" android:layout_width="fill_parent"
              android:layout_height="wrap_content" />
    </LinearLayout>
    

     

    在 AndroidManifest.xml 文件中,指定 Activity 运行 CreatingXML。使用 uses-sdk 元素 11 指定最低的 Android 版本。使用活动元素与子元素指定活动 intent-filteraction。清单 2 显示了该文件。


    清单 2. 配置文件 AndroidManifest.xml

    				
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="android.xml"
          android:versionCode="1"
          android:versionName="1.0">
        <uses-sdk android:minSdkVersion="11" />
    
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".CreatingXML"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
    </manifest>
    

     

    现在,您将在活动类 CreatingXML 中创建一份 XML 文档,该类扩展了 Activity 类。因为示例使用 javax.xml.parsers.DocumentBuilder 来创建 XML 文档,需要导入以下内容。
    • javax.xml.parsers.DocumentBuilder
    • javax.xml.parsers.DocumentBuilderFactory
    • org.w3c.dom
    • javax.xml.transform.TransformerFactory
    • javax.xml.transform.Transformer
    • javax.xml.transform.dom.DOMSource
    • javax.xml.transform.stream.StreamResult
    启动该活动时将调用 onCreate(Bundle savedInstanceState) 方法。在 onCreate 方法中,可以使用 setContentView 方法设置 UI,并使用 setContentView(R.layout.main); 设置布局资源。
    在 main.xml 文件中使用 findViewById 方法定义 Android 小部件 TextView 对象(其 id 为 xmlresult),如下所示: TextView xmlResult = (TextView) findViewById(R.id.xmlresult);
    使用静态方法 newInstance() 创建 DocumentBuilderFactory 对象的一个实例。使用 DocumentBuilderFactory 类的 newDocumentBuilder() 方法创建一个 DocumentBuilder 对象,如 清单 3 中所示。


    清单 3. 创建一个 DocumentBuilder

    				
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    

     

    XML 文档由 DOM 结构表示。使用 DocumentBuilder 类的 newDocument() 方法创建一个新的 Document 对象:Document document = documentBuilder.newDocument();
    使用 createElement() 方法可创建 Document 对象的根元素 "catalog"Element rootElement = document.createElement("catalog");
    正如 清单 4 中所示,可以使用 setAttribute 方法设置根元素上的 publisherjournal 属性。


    清单 4. 设置根元素属性

    				
    rootElement.setAttribute("journal", "Oracle Magazine");
    rootElement.setAttribute("publisher", "Oracle Publishing");
    

     

    使用 appendChild() 方法将根元素附加到 Document 对象: document.appendChild(rootElement);
    使用 createElement() 方法创建一个 "article" 元素。使用 appendChild() 方法将该元素附加到根元素,如 清单 5 中所示。


    清单 5. 创建一个 "article" 元素

    				
    Element articleElement = document.createElement("article");
    rootElement.appendChild(articleElement);
    

     

    如 清单 6 中所示,向 "article" 元素添加一个 "edition" 元素。


    清单 6. 添加 "edition" 元素

    				
    Element editionElement = document.createElement("edition");
    articleElement.appendChild(editionElement);
    

     

    使用 createTextNode() 方法向 "edition" 元素添加一个文本节点。将文本节点的值设置为 "Sept-Oct 2005",如下所示: editionElement.appendChild(document.createTextNode("Sept-Oct 2005"));.
    类似地,创建一个 "title" 元素并将它添加给 "article" 元素。如 清单 7 中所示,向 "title" 元素添加一个文本节点,并将其值设为 "Creating Search Pages"


    清单 7. 创建一个文本节点

    				
    Element titleElement = document.createElement("title");
    articleElement.appendChild(titleElement);
    titleElement.appendChild(document.createTextNode("Creating Search Pages"));
    

     

    "article" 元素添加一个 "author" 元素。向 "author" 元素添加一个文本节点,并将其值设为 "Steve Muench",如 清单 8 中所示。


    清单 8. 添加 "author" 元素

    				
    authorElement = document.createElement("author");
    articleElement.appendChild(authorElement);
    authorElement.appendChild(document.createTextNode("Steve Muench"));
    

     

    向根元素添加另一个 "article" 元素。您可以使用与非 Android 应用程序相同的方式来创建 XML 文档 DOM 结构。这个示例将执行以下操作:
    • 将 DOM Document 对象输出到一个 ByteArrayOutputStream
    • 以字符串的形式从 OutputStream 获取 XML 文档
    • 设置 Android 上的 TextView 小部件上的字符串
    使用静态方法 newInstance() 创建一个 TransformerFactory 对象。如 清单 9中所示,使用 factory 对象的 newTransformer() 方法创建一个 Transformer 对象。


    清单 9. 创建一个转换器对象

    				
    TransformerFactory factory = TransformerFactory.newInstance();			
    Transformer transformer = factory.newTransformer();
    

     

    创建一个 java.util.Properties 对象,并设置以下输出属性:
    • 缩进 (INDENT)
    • 输出格式 (METHOD)
    • XML 声明 (OMIT_XML_DECLARATION)
    • XML 版本 (VERSION)
    • XML 文档的编码方式 (ENCODING)
    要转换 DOM 结构,则需要使用 Source 对象与 Result 对象。从 Document 对象创建一个 DOMSource 对象。为了获得输出,我们将从 ByteArrayOutputStream 创建一个 ByteArrayOutputStream 对象和一个 StreamResult 对象,如 清单 10 中所示。


    清单 10. 转换 DOM 结构

    				
    DOMSource domSource = new DOMSource(document.getDocumentElement());
    OutputStream output = new ByteArrayOutputStream();
    StreamResult result = new StreamResult(output);
    

     

    使用 Transformer对象的 transform() 方法转换 Document 对象,如下所示: transformer.transform(domSource, result);
    ByteArrayOutputStream 对象获取 String 对象,并设置 TextView 小部件 xmlResult 上的 String


    清单 11. 获取与设置字符串

    				
    String xmlString = output.toString();
    xmlResult.setText(xmlString);
    

     

    清单 12 显示了 ActivityCreatingXML


    清单 12. Activity 类 CreatingXML

    				
    package android.xml;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.ParserConfigurationException;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.Transformer;
    import java.util.Properties;
    import javax.xml.transform.OutputKeys;
    
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    import java.io.OutputStream;
    import java.io.ByteArrayOutputStream;
    import javax.xml.transform.dom.DOMSource;
    
    public class CreatingXML extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            TextView     xmlResult = (TextView) findViewById(R.id.xmlresult);
    
            try {
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
                          .newInstance();
                DocumentBuilder documentBuilder = documentBuilderFactory
                          .newDocumentBuilder();
                Document document = documentBuilder.newDocument();
    
                Element rootElement = document.createElement("catalog");
                rootElement.setAttribute("journal", "Oracle Magazine");
                rootElement.setAttribute("publisher", "Oracle Publishing");
                document.appendChild(rootElement);
    
                Element articleElement = document.createElement("article");
                rootElement.appendChild(articleElement);
    
                Element editionElement = document.createElement("edition");
                articleElement.appendChild(editionElement);
                editionElement.
                appendChild(document.createTextNode("Sept-Oct 2005"));
    
                Element titleElement = document.createElement("title");
                articleElement.appendChild(titleElement);
                titleElement.appendChild(document
                          .createTextNode("Creating Search Pages"));
    
                Element authorElement = document.createElement("author");
                articleElement.appendChild(authorElement);
                authorElement.
                appendChild(document.createTextNode("Steve Muench"));
    
                articleElement = document.createElement("article");
                rootElement.appendChild(articleElement);
    
                editionElement = document.createElement("edition");
                articleElement.appendChild(editionElement);
                editionElement.appendChild(document
                          .createTextNode("November - December 2010"));
    
                titleElement = document.createElement("title");
                articleElement.appendChild(titleElement);
                titleElement.appendChild(document
                          .createTextNode("Agile Enterprise Architecture"));
    
                authorElement = document.createElement("author");
                articleElement.appendChild(authorElement);
                authorElement.appendChild(document.createTextNode("Bob Rhubart"));
    
                TransformerFactory factory = TransformerFactory.newInstance();
                Transformer transformer = factory.newTransformer();
                Properties outFormat = new Properties();
                outFormat.setProperty(OutputKeys.INDENT, "yes");
                outFormat.setProperty(OutputKeys.METHOD, "xml");
                outFormat.setProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
                outFormat.setProperty(OutputKeys.VERSION, "1.0");
                outFormat.setProperty(OutputKeys.ENCODING, "UTF-8");
                transformer.setOutputProperties(outFormat);
                DOMSource domSource = 
                new DOMSource(document.getDocumentElement());
                OutputStream output = new ByteArrayOutputStream();
                StreamResult result = new StreamResult(output);
                String xmlString = output.toString();
                xmlResult.setText(xmlString);
    
            } catch (ParserConfigurationException e) {
            } catch (TransformerConfigurationException e) {
            } catch (TransformerException e) {
            }
    
        }
    }

     

    现在您可以运行 Android 应用程序了。右键单击 CreatingXML 应用程序节点并选择 Run As > Android Application,如 图 3中所示。


    图 3. 运行 Android 应用程序
    如何运行 Android 应用程序的屏幕截图

    Android AVD 启动,而 Android 应用程序部署在 AVD 上,如 图 4 中所示。


    图 4. 安装在 Android 设备上的应用程序
    安装在 Android 设备上的应用程序的屏幕截图

    单击 CreatingXML 应用程序图标。启动应用程序活动,在 Android 设备上将创建和显示 XML 文档,如 图 5 中所示。


    图 5. 在 Android 设备上创建并显示一份 XML 文档
    在 Android 设备上创建并显示一份 XML 文档的屏幕截图


    回页首
    解析 XML 文档
    本节介绍如何解析 XML 文档。您可以使用标准的 DOM 与 SAX 解析器或其他解析器。在使用了 org.xmlpull.v1.XmlPullParser 的示例中,将要解析 XML 文档 catalog.xml,如 清单 13 中所示。


    清单 13. catalog.xml

    				
    <?xml version = '1.0' encoding = 'UTF-8'?>
    <catalog journal="Oracle Magazine" publisher="Oracle Publishing">
         <article>
              <edition>Sept-Oct 2005</edition>
              <title>Creating Search Pages</title>
              <author>Steve Muench</author>
         </article>
         <article>
              <edition>November - December 2010</edition>
              <title>Agile Enterprise Architecture</title>
              <author>Bob Rhubart</author>
         </article>
    </catalog>
    

     

    和前一节 创建一份 XML 文档 中一样,您需要创建一个 Android 项目来解析 XML 文档。
    1. 在 Eclipse IDE 中选择 File > New。在 New 对话框中,选择 Android > Android Project。然后单击 Next。
    2. 在 New Android Project 窗口中,如 图 6 中一样指定:
      • 项目名称:ParsingXML
      • “构建目标” 复选框:Android Platform 3.0 与 API 11。
      • 属性:
        • 应用程序名称:ParsingXML
        • 包名称:android.xml
        • 选择 “创建活动”:Activity 类 (ParsingXML)
        • 最低 SDK 版本:11


      图 6. 创建一个 Android 项目来解析 XML 文档
      创建一个 Android 项目来解析 XML 文档的屏幕截图

    3. 单击 Finish。
      这样就创建好了一个 Android 项目,它包含以下内容:
      • 一个 ActivityParsingXML
      • 一个 res/layout/main.xml 布局文件
      • 一个 AndroidManifest.xml 应用程序配置文件
    解析 XML 文档并使用标签输出元素值,将标签与元素文本节点值输出到 TextView 小部件上。
    1. 在 main.xml 文件中,为每个标签和元素文本节点值添加一个 TextView 小部件。
    2. 创建一个 LinearLayout 并将 android:orientation 设置为 "vertical"
    3. 添加具有以下 id 的 TextView 元素:
      • "journal_label"
      • "journal"
      • "publisher_label"
      • "publisher"
      • "edition1_label"
      • "edition1"
      • "title1_label"
      • "title1"
      • "author1_label"
      • "author1"
      • "edition2_label"
      • "title2_label"
      • "title2"
      • "author2_label"
      • "author2"
    清单 14 显示了 main.xml 文件。


    清单 14. 布局文件 main.xml

    				
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical" android:layout_width="fill_parent"
         android:layout_height="fill_parent">
              <TextView android:id="@+id/journal_label"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content"
                   android:text="Journal:" />
              <TextView android:id="@+id/journal" android:singleLine="true"
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content" />
              <TextView android:id="@+id/publisher_label"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content"
                   android:text="Publisher:" />
              <TextView android:id="@+id/publisher"
                   android:singleLine="true"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content" />
              <TextView android:id="@+id/edition1_label"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content"
                   android:text="Edition:" />
              <TextView android:id="@+id/edition1" android:singleLine="true"
                   android:layout_width="fill_parent" 			
                   android:layout_height="wrap_content" />
              <TextView android:layout_width="fill_parent" 
                   android:id="@+id/title1_label"
                   android:layout_height="wrap_content" android:text="Title:" />
              <TextView android:id="@+id/title1" 			
                   android:singleLine="true" android:layout_width="fill_parent"
                   android:layout_height="wrap_content" />
              <TextView android:layout_width="fill_parent" 
                   android:id="@+id/author1_label"
                   android:layout_height="wrap_content" android:text="Author:" />
    
              <TextView android:id="@+id/author1" android:singleLine="true"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content" />
              <TextView android:id="@+id/edition2_label"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content"
                   android:text="Edition:" />
    
    
              <TextView android:id="@+id/edition2" android:singleLine="true"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content" />
              <TextView android:layout_width="fill_parent" 
                   android:id="@+id/title2_label"
                   android:layout_height="wrap_content" android:text="Title:" />
              <TextView android:id="@+id/title2" 			
                   android:singleLine="true" android:layout_width="fill_parent"
                   android:layout_height="wrap_content" />
              <TextView android:layout_width="fill_parent" 
                   android:id="@+id/author2_label"
                   android:layout_height="wrap_content" android:text="Author:" />
              <TextView android:id="@+id/author2" android:singleLine="true"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content" />
    </LinearLayout>
    

     

    在 AndroidManifest.xml 文件中指定以下内容:
    • 要运行的 activity,指定为 ParsingXML
    • 使用 uses-sdk 元素将最低的 Android 版本指定为 11
    • 使用活动元素与子元素指定 activityintent-filteraction
    清单 15 显示了最后获得的 AndroidManifest.xml 文件:


    清单 15. 配置文件 AndroidManifest.xml

    				
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="android.xml"
          android:versionCode="1"
          android:versionName="1.0">
        <uses-sdk android:minSdkVersion="11" />
    
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".ParsingXML"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
    </manifest>
    

     

    为了解析 XML 文档源,该示例使用了 android.content.res.XmlResourceParser,它扩展了 XmlPullParser 接口。您需要在 res 目录中为 XML 文档创建一个目录。
    1. 在 res 目录中创建一个名为 xml 的目录,然后将 XML 文档复制到 res/xml 目录中。
    2. ParsingXML 活动类中,导入 android.content.res.XmlResourceParser 和 org.xmlpull.v1.XmlPullParser 接口。
      启动活动时调用了 onCreate(Bundle savedInstanceState) 方法。
    3. onCreate 方法中,使用 setContentView 方法和布局资源设置 UI,比如: setContentView(R.layout.main);
    4. 使用 findViewById 方法与小部件 id 获取 main.xml 文件中定义的 Android TextView 小部件,如 清单 16中所示。


    清单 16. 获取 TextView 小部件

    				
    TextView journal = (TextView) findViewById(R.id.journal);
    TextView publisher = (TextView) findViewById(R.id.publisher);
    TextView edition1 = (TextView) findViewById(R.id.edition1);
    TextView title1 = (TextView) findViewById(R.id.title1);
    TextView author1 = (TextView) findViewById(R.id.author1);
    TextView edition2 = (TextView) findViewById(R.id.edition2);
    TextView title2 = (TextView) findViewById(R.id.title2);
    TextView author2 = (TextView) findViewById(R.id.author2);
    

     

    从 res/xml 目录下的 catalog.xml 文档创建一个 XmlResourceParser 对象,代码如下: XmlResourceParser xpp = getResources().getXml(R.xml.catalog);
    您将使用 XmlResourceParser 来解析 XML 文档,它也是一个 pull 解析器(扩展了 XmlPullParser 接口)。该 pull 解析器将 XML 文档处理为一系列解析事件。可以使用 next() 方法获得下一个解析事件,代码如下: xpp.next();
    使用 getEventType 方法 int 获取事件类型,它返回一个 int 值:eventType = xpp.getEventType();
    Table 1 中显示了所有可能返回的 int 值。


    表 1. 事件类型 int

    int 值 描述
    COMMENT 一段 XML 注释
    DOCDECL XML 文档类型描述
    END_DOCUMENT 文档结尾
    END_TAG 一个元素标签的结尾
    IGNORABLE_WHITESPACE 可忽略的空格
    PROCESSING_INSTRUCTION 处理指令
    START_DOCUMENT 文档开始
    START_TAG 一个元素标签的开始
    TEXT 字符数据

     

    XML 文档只需要解析元素与元素文本节点。这些属性不会生成事件,您可以从元素中检索它们。您只会看到 START_TAGTEXT 事件类型,它们分别对应于元素开始标签与元素文本节点。您首先要确定元素标签,然后获得元素标签的文本节点值。使用 int 变量 iter 来表示 XML 文档中不同的 "article"元素,同时使用 String 变量 elemtext 来制定元素标签名称。要为迭代器指定一个 int 变量并为元素名称指定一个 String 变量,请使用 清单 17 中的代码。


    清单 17. 指定变量

    				
    int iter = 0;
    String elemtext = null;
    

     

    当到达 XML 文档的结尾之前:
    • 确定事件类型
    • 获得元素标签名称与元素标签文本值
    • 设置对应 TextView 小部件上的文本节点值
    例如,像 清单 18 中一样获得元素标签名称。


    清单 18. 获得开始标签的元素名称

    				
    while (eventType != XmlPullParser.END_DOCUMENT) {
                  if (eventType == XmlPullParser.START_TAG) {
             String elemName = xpp.getName();
    ...
    ...
                                                             }
                                                     }
    

     

    如果元素标签名称是 "catalog",请获得 "journal""publisher" 的属性值,并设置 "journal""publisher" TextView 小部件上的属性值。可以使用 XmlResourceParsergetAttributeValue() 方法来获得属性值,如 清单 19 中所示。


    清单 19. 获得与设置属性值

    				
    if (elemName.equals("catalog")) {			
    String journalAttr = xpp.getAttributeValue(null,"journal");
    String publisherAttr = xpp.getAttributeValue(null,"publisher");
    journal.setText(journalAttr);				
    publisher.setText(publisherAttr);	
    ...
    }
    

     

    增加每个 "article" 元素的迭代器变量 iter 的值,如 清单 20 中所示。


    清单 20. 增加变量的值

    				
    if (elemName.equals("article")) {
         iter = iter + 1;
                                     }
    

     

    如果事件类型为 TEXT 则获得文本节点值,并在相应的 TextView 小部件上设置文本节点值。可以使用 elemtext String 变量来获得元素标签名称,该变量是为事件类型 START_TAG 设置的。使用 XmlResourceParsergetText() 方法获得文本节点值。使用 setText 方法设置 TextView 小部件上的文本节点值,如 清单 21 中所示。


    清单 21. 获得文本节点值

    				
    else if (eventType == XmlPullParser.TEXT) {
    //Obtain the element name and element text node values and 
    //set the text node values on the corresponding TextView 
    //widgets
    }
     
    

     

    清单 22 显示了 ActivityParsingXML


    清单 22. Activity 类 ParsingXML

    				
    package android.xml;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    import org.xmlpull.v1.XmlPullParser;
    import org.xmlpull.v1.XmlPullParserException;
    import java.io.IOException;
    import android.content.res.XmlResourceParser;
    
    public class ParsingXML extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             //setContentView(R.layout.main);
             setContentView(R.layout.relativelayout);
             TextView journal = (TextView) findViewById(R.id.journal);
             TextView publisher = (TextView) findViewById(R.id.publisher);
             TextView edition1 = (TextView) findViewById(R.id.edition1);
             TextView title1 = (TextView) findViewById(R.id.title1);
             TextView author1 = (TextView) findViewById(R.id.author1);
    
             TextView edition2 = (TextView) findViewById(R.id.edition2);
             TextView title2 = (TextView) findViewById(R.id.title2);
             TextView author2 = (TextView) findViewById(R.id.author2);
             try {
                  XmlResourceParser xpp = getResources().getXml(R.xml.catalog);
    			
                  xpp.next();
                  int eventType = xpp.getEventType();
                  int iter = 0;
                  String elemtext = null;
    
                  while (eventType != XmlPullParser.END_DOCUMENT) {
    
                     if (eventType == XmlPullParser.START_TAG) {
    
                         String elemName = xpp.getName();
                         if (elemName.equals("catalog")) {
                     String journalAttr = xpp.getAttributeValue(null,
                                      "journal");
                     String publisherAttr = xpp.getAttributeValue(null,
                                      "publisher");
                            journal.setText(journalAttr);
                            publisher.setText(publisherAttr);
                         }
                         if (elemName.equals("article")) {
                            iter = iter + 1;
                         }
    					
                         if (elemName.equals("edition")) {
                            elemtext = "edition";
                         }
                         if (elemName.equals("title")) {
                            elemtext = "title";
                         }
                         if (elemName.equals("author")) {
                            elemtext = "author";
                         }
                     }
    
                     else if (eventType == XmlPullParser.TEXT) {
                         if (iter == 1) {
                            if (elemtext.equals("edition")) {
                                 edition1.setText(xpp.getText());
                            } else if (elemtext.equals("title")) {
                                 title1.setText(xpp.getText());
                            } else if (elemtext.equals("author")) {
                                 author1.setText(xpp.getText());
                            }
                         }
    
                         else if (iter == 2) {
                            if (elemtext.equals("edition")) {
                                 edition2.setText(xpp.getText());
                            } else if (elemtext.equals("title")) {
                                 title2.setText(xpp.getText());
                            } else if (elemtext.equals("author")) {
                                 author2.setText(xpp.getText());
                            }
    
                         }
                     }
                     eventType = xpp.next();
                  }
    
             } catch (XmlPullParserException e) {
             } catch (IOException e) {
             }
    
        }
    }
    

     

    要运行 Android 应用程序,请右键单击 ParsingXML 应用程序并选择 Run As > Android Application,如 图 7 中所示。


    图 7. 运行一个 Android 应用程序来解析 XML 文档
    Screen capture of running the Android application to parse an XML document

    Android AVD 已启动,而且 ParsingXML 应用程序已经安装在了 Android 设备上,如 图 8 中所示。


    图 8. 安装在 Android 设备上的ParsingXML 应用程序
    安装在 Android 设备上的ParsingXML 应用程序的屏幕截图

    单击 ParsingXML 应用程序启动应用程序活动。然后解析 XML 文档 catalog.xml 并将它输出到 Android 设备,如 图 9 中所示。


    图 9. 通过解析获得的 XML 文档节点值
    通过解析获得的 XML 文档节点值的屏幕截图

    元素标签与元素文本节点是垂直堆放的。文本节点值位于相应标签右侧的布局更为可取。为了实现文本节点值位于标签右侧的自定义布局,可以使用 RelativeLayout 代替 LinearLayout。使用 TextView 小部件的 android:layout_marginLeft 属性可以让文本节点值出现在标签的右侧。使用 android:layout_below 属性可以让文本节点值出现在前一行中文本节点值的下方。
    RelativeLayout 提供了其他属性,比如 android:layout_toRightOf,用于输出一个小部件在另一个小部件的右侧;还提供了 android:layout_toLeftOf,用于输出一个组件在另一个组件的左侧。清单 23 显示了相对布局的 main.xml。


    清单 23. 相对布局

    				
    <?xml version="1.0" encoding="utf-8"?>
    
    <RelativeLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:padding="5px">
    
              <TextView android:id="@+id/journal_label"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content"
                   android:text="Journal:" />
    
              <TextView android:id="@+id/journal"  
                   android:layout_marginLeft="50px"
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content" />
    
              <TextView android:id="@+id/publisher_label" 
                   android:layout_below="@id/journal_label"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content"
                   android:text="Publisher:" />
    
              <TextView android:id="@+id/publisher"
                   android:layout_below="@id/journal"
                   android:layout_marginLeft="70px"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content" />
    
              <TextView android:id="@+id/edition1_label"  
                   android:layout_below="@id/publisher_label"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content"
                   android:text="Edition:" />
    
              <TextView android:id="@+id/edition1" 
                   android:layout_below="@id/publisher"
                   android:layout_width="fill_parent" 
                   android:layout_marginLeft="50px"
                   android:layout_height="wrap_content" />
    
              <TextView android:layout_width="fill_parent" 
                   android:id="@+id/title1_label" 
                   android:layout_below="@id/edition1_label"
                   android:layout_height="wrap_content" 
                   android:text="Title:" />
    
              <TextView android:id="@+id/title1" 
                   android:layout_marginLeft="40px" 
                   android:layout_below="@id/edition1"
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content" />
    
              <TextView android:layout_width="fill_parent" 
                   android:id="@+id/author1_label" 
                   android:layout_below="@id/title1_label"
                   android:layout_height="wrap_content" 
                   android:text="Author:" />
    
              <TextView android:id="@+id/author1" 
                   android:layout_below="@id/title1"
                   android:layout_width="fill_parent" 
                   android:layout_marginLeft="50px"
                   android:layout_height="wrap_content" />
    
              <TextView android:id="@+id/edition2_label" 
                   android:layout_below="@id/author1_label"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content"
                   android:text="Edition:" />
    
              <TextView android:id="@+id/edition2" 
                   android:layout_below="@id/author1"
                   android:layout_width="fill_parent" 
                   android:layout_marginLeft="50px"
                   android:layout_height="wrap_content" />
    
              <TextView android:layout_width="fill_parent" 
                   android:id="@id/title2_label" 
                   android:layout_below="@id/edition2_label"
                   android:layout_height="wrap_content" 
                   android:text="Title:" />
    
              <TextView android:id="@+id/title2" 
                   android:layout_marginLeft="40px" 
                   android:layout_below="@id/edition2"
                   android:layout_width="fill_parent" 
                   android:layout_height="wrap_content" />
    
              <TextView android:layout_width="fill_parent" 
                   android:id="@+id/author2_label" 
                   android:layout_below="@id/title2_label"
                   android:layout_height="wrap_content" 
                   android:text="Author:" />
    
              <TextView android:id="@+id/author2" 
                   android:layout_below="@id/title2"
                   android:layout_width="fill_parent" 
                   android:layout_marginLeft="50px"
                   android:layout_height="wrap_content" />
    
    </RelativeLayout>
    

     

    修改布局后返回 ParsingXML 应用程序。XML 文档将在指定布局中解析与输出节点值,如 图 10 中所示。


    图 10. 格式化的 XML 文档节点值
    Screen capture of the formatted XML Document node values 

    [!--infotagslink--]

    相关文章

    • php读取zip文件(删除文件,提取文件,增加文件)实例

      下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
    • 安卓手机app添加支付宝支付开发教程

      支付宝支付在国内算是大家了,我们到处都可以使用支付宝了,下文整理介绍的是在安卓app应用中使用支付宝进行支付的开发例子。 之前讲了一篇博客关与支付宝集成获取...2016-09-20
    • Jupyter Notebook读取csv文件出现的问题及解决

      这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
    • PHP+Ajax手机发红包的程序例子

      PHP+Ajax有许多的功能都会用到它小编今天就有使用PHP+Ajax实现的一个微信登录功能了,下面我们来看一个PHP+Ajax手机发红包的程序例子,具体如下所示。 PHP发红包基本...2016-11-25
    • 华为手机怎么恢复已卸载的应用?华为手机恢复应用教程

      华为手机怎么恢复已卸载的应用?有时候我们在使用华为手机的时候,想知道卸载的应用怎么恢复,这篇文章主要介绍了华为手机恢复应用教程,需要的朋友可以参考下...2020-06-29
    • Photoshop打开PSD文件空白怎么解决

      有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
    • 破解安卓手机上的九宫格锁方法步骤

      很多用安卓智能手机的朋友是用九宫格锁屏,网上也有暴力删除手机图形锁的方法,不过我们可以用程序来破解。本文只提供技术学习,不能干坏事 安卓手机的图形锁(九宫格)...2016-09-20
    • 解决python 使用openpyxl读写大文件的坑

      这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
    • C#实现HTTP下载文件的方法

      这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
    • SpringBoot实现excel文件生成和下载

      这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
    • C#操作本地文件及保存文件到数据库的基本方法总结

      C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
    • 华为手机怎么开启双时钟? 华为添加双时钟的技巧

      华为手机怎么开启双时钟?华为手机是可以设置双时钟的,如果来回在两个有时差的地方工作,是可以设置双时钟显示,下面我们就来看看华为添加双时钟的技巧,需要的朋友可以参考下...2020-12-08
    • php无刷新利用iframe实现页面无刷新上传文件(1/2)

      利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
    • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

      手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
    • php批量替换内容或指定目录下所有文件内容

      要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
    • PHP文件上传一些小收获

      又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
    • AI源文件转photoshop图像变模糊问题解决教程

      今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
    • C++万能库头文件在vs中的安装步骤(图文)

      这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
    • Zend studio文件注释模板设置方法

      步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
    • php文件上传你必须知道的几点

      本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21