• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android开发学习之路--网络编程之xml、json

Android开发学习之路--网络编程之xml、json

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了Android开发学习之路--网络编程之xml、json等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android开发学习之路--网络编程之xml、json


一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的。常用的就是xml和json了。在此先要搭建个简单的服务器吧,首先呢下载xampp,然后安装之类的就不再多讲了。安装好后,启动xampp,之后在浏览器输入localhost或者127.0.0.1就可以看到如下所示了:

\

这个就表示服务器已经运行了,具体的代码都是放在这个/Applications/XAMPP/htdocs目录下的。然后待会儿编写个xml文件也放在这里。 编写个简单的xml文件吧。

 

2

3 xiao hong

4 25

5 woman

6 english

7

8

9 xiao ming

10 15

11 man

12

13

14

 </div> 这里为了方便,我在htdocs下面新建了一个test文件夹,然后再新建了一个person.xml文件,习惯了用vim,这里就用vim来实现了一把,保存退出后,我们去看下效果,打开chrome浏览器,输入http://localhost/test/person.xml。发现浏览器如下图所示:

\

显示的内容就是我们文件的内容,接下去通过app去获取这个信息。

xml解析主要有三种方式,SAX,Pull,Dom。下面就用这几种方法来实现下。

首先是SAX方式,SAX方式主要是两部分组成,一部分是解析器,也就是XMLReader接口,负责读取XML文档,另一部分是事件处理器ContentHandler,负责对发送事件响应和进行XML文档处理。

继承DefaultHandler,并重写5个父类的方法。

1、startDocument方法:开始XML解析的时候调用。

2、startElement方法:开始解析某个节点的时候调用。

3、characters方法:获取节点内容的时候调用。

4、endElement方法:解析完某个节点的时候调用。

5、endDocument方法:完成XML解析时候调用。

先新建类SAXContentHandler类,继承DefaultHandler类,编写代码如下:

package com.jared.emxmlstudy;

import android.util.Log;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * Created by jared on 16/2/19.
 */
public class SAXContentHandler extends DefaultHandler {

    private static final String TAB = "SAXContentHandler";

    private String nodeName;
    private StringBuffer mName;
    private StringBuffer mAge;
    private StringBuffer mSex;
    private StringBuffer mClass;

    @Override
    public void startDocument() throws SAXException {
        mName = new StringBuffer();
        mAge = new StringBuffer();
        mSex = new StringBuffer();
        mClass = new StringBuffer();
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        nodeName = localName;
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        if("name".equals(nodeName)) {
            mName.append(ch, start, length);
        }else if("age".equals(nodeName)) {
            mAge.append(ch, start, length);
        } else if("sex".equals(nodeName)) {
            mSex.append(ch, start, length);
        } else if("class".equals(nodeName)) {
            mClass.append(ch, start, length);
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if("Teacher".equals(localName)) {
            Log.d(TAB, "This is Teacher");
            Log.d(TAB, "name is:" + mName.toString().trim());
            Log.d(TAB, "age is:" + mAge.toString().trim());
            Log.d(TAB, "sex is:" + mSex.toString().trim());
            Log.d(TAB, "class is:" + mClass.toString().trim());
            mName.setLength(0);
            mAge.setLength(0);
            mSex.setLength(0);
            mClass.setLength(0);
        } else if("Student".equals(localName)) {
            Log.d(TAB, "This is Student");
            Log.d(TAB, "name is:" + mName.toString().trim());
            Log.d(TAB, "age is:" + mAge.toString().trim());
            Log.d(TAB, "sex is:" + mSex.toString().trim());
            mName.setLength(0);
            mAge.setLength(0);
            mSex.setLength(0);
        }
    }

    @Override
    public void endDocument() throws SAXException {

    }
}
这里要使用三种方法,所以修改布局如下:
<!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E-->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_margin="10dp" tools:context="com.jared.emxmlstudy.MainActivity"><button android:id="@+id/getXmlsax" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="SAX方式获取"></button><button android:id="@+id/getXmlpull" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Pull方式获取"></button><button android:id="@+id/getXmldom" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Dom方式获取"></button></linearlayout>
然后MainActivity中添加代码如下;
package com.jared.emxmlstudy;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import java.io.StringReader;

import javax.xml.parsers.SAXParserFactory;

import cz.msebera.android.httpclient.Header;

public class MainActivity extends AppCompatActivity {

    private static final String xmlUrl = "http://192.168.1.102/test/person.xml";

    private Button mGetXmlSax;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mGetXmlSax = (Button)findViewById(R.id.getXmlsax);
        mGetXmlSax.setOnClickListener(new myOnClickListener());

    }

    private class myOnClickListener implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.getXmlsax:
                    sendRequestWithAsyncHttpClient(xmlUrl);
                    break;
                default:
                    break;
            }
        }
    }

    private void sendRequestWithAsyncHttpClient(String url) {

        AsyncHttpClient client = new AsyncHttpClient();
        client.get(url, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int i, Header[] headers, byte[] bytes) {
                try {
                    String response = new String(bytes, 0, bytes.length, "utf-8");
                    parseXMLWithSax(response);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(int i, Header[] heade



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-225.2.5 Fragment实例精讲——新闻(购物)类App列表Fragment的简单实现
  • 2017-05-26Android View体系(九)自定义View
  • 2017-08-02Android系统服务(一)解析ActivityManagerService(AMS)
  • 2017-05-26跨进程SharedPreferences异常。,sharedpreferences
  • 2017-05-26Android编程思想双11口诀,android编程思想
  • 2017-05-26Android Studio创建/打开项目时一直处于Building“project name”Gradle project info的解决办法,androidgradle
  • 2017-05-26Android之使用Bundle进行IPC,androidbundleipc
  • 2017-05-26极其简单的搭建eclipse的android开发环境,搭建eclipseandroid
  • 2017-05-26win7系统连接WiFi上网信号很弱怎么办
  • 2017-05-26Android 知识Tips,android知识tips

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 4.5.1 Intent的基本使用
    • Android学习过程中的一些基础笔记,android笔记
    • DroidPlugin插件化开发,droidplugin插件
    • RelativeLayout的位置属性总结,relativelayout总结
    • HBase Thrift2 CPU过高问题分析
    • android TextView实现跑马灯效果
    • Android Drawable的9种子类 介绍
    • oracle 代码报错大全分析
    • redis cluster搭建
    • fastdfs 使用遇到的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有