zoukankan      html  css  js  c++  java
  • 解释通讯协议中的xml

    现在做的应用基本离不网络,数据协议一般是使用 轻量级的 json 、xml,这篇文章分享一个解释xml的功能

    方便从网络的字节流中提取字符串数据。

    代码如下:

    public class XMLLoader {        
        public interface OnLoadXMLCompletedListener{
            public void onLoadXMLCompleted(Object obj, int what,Bundle data);
        }
        
        private static final String TAG = "XMLLoader";
        
        private XMLLoaderHandler mHandler;
        private Handler mHListener;
        private OnLoadXMLCompletedListener mOnLoadXMLCompletedListener;
        private String mUrl;
        private int mWhat;
        private Bundle mData;
    
        public void load(String url, XMLLoaderHandler handler, OnLoadXMLCompletedListener listener, int what,Bundle data) {
            mUrl = url;
            mHandler = handler;
            mOnLoadXMLCompletedListener = listener;
            mWhat = what;
            mData = data;
            Util.log(TAG, "url = "+mUrl);
            
            URLLoader loader = new URLLoader();
            loader.loadUrl(url, new URLLoader.OnLoadFinishedListener() {
                
                @Override
                public void onFinish(InputStream is) {
    //                Util.log(TAG, "Func:onFinish, Thread name = " + Thread.currentThread().getName() + ", ID = " + Thread.currentThread().getId() + ", state = " + Thread.currentThread().getState());
                    parser(is);                
                }
            });
        }
        
        public void load(String url, XMLLoaderHandler handler, Handler listener, int what,Bundle data) {
            mUrl = url;
            mHandler = handler;
            mHListener = listener;
            mWhat = what;
            mData = data;
            Util.log(TAG, "url = "+mUrl);
            
            URLLoader loader = new URLLoader();
            loader.loadUrl(url, new URLLoader.OnLoadFinishedListener() {
                
                @Override
                public void onFinish(InputStream is) {
                    parser(is);                
                }
            });
        }
        public void load(InputStream is,XMLLoaderHandler handler, Handler listener, int what,Bundle data){
            mHandler = handler;
            mHListener = listener;
            mWhat = what;
            mData = data;
            Util.log(TAG, "InputSream = " + is);
            if(is != null)
                parser(is);
        }
        public void load(InputStream is, XMLLoaderHandler handler, OnLoadXMLCompletedListener listener, int what,Bundle data) {
            mHandler = handler;
            mOnLoadXMLCompletedListener = listener;
            mWhat = what;
            mData = data;
            Util.log(TAG, "InputSream = " + is);
            if(is != null)
                parser(is);
        }
        public Object load(InputStream is){
            if(is != null){
                return parser(is);
            }else
                return null;
        }
        
        public Object load(byte[] body,XMLLoaderHandler handler, OnLoadXMLCompletedListener listener){
            mHandler = handler;
            mOnLoadXMLCompletedListener = listener;
            InputStream is=new ByteArrayInputStream(body);
            if(is!=null){
                return parser(is);
            }else 
                return null;
        }
        public Object load(InputStream is,XMLLoaderHandler handler){
            mHandler = handler;
    
            Util.log(TAG, "InputSream = " + is);
            if(is != null)
                return parser(is);
            return null;
        }
    
        private Object parser(InputStream is) {
             SAXParserFactory factory=SAXParserFactory.newInstance(); 
             Object obj = null;
             try {//解释xml数据            
                 SAXParser parser=factory.newSAXParser();              
                 XMLReader xmlReader=parser.getXMLReader();                     
                 xmlReader.setContentHandler(mHandler);   
                 InputSource input=new InputSource();
                 input.setEncoding("utf-8");
                 input.setByteStream(is);
                 xmlReader.parse(input);
                 obj = mHandler.getInfo();
                 Util.log(TAG, "[parser] obj = "+obj);
             } catch(Exception ex) {
                 ex.printStackTrace();
             }
    //         Util.log(TAG, "Func:parser, Thread name = " + Thread.currentThread().getName() + ", ID = " + Thread.currentThread().getId() + ", state = " + Thread.currentThread().getState());
             if(null != mOnLoadXMLCompletedListener) {//通知UI线程更新数据
                 mOnLoadXMLCompletedListener.onLoadXMLCompleted(obj, mWhat,mData);
                
             } else if(null != mHListener){
                 Message msg = mHListener.obtainMessage(mWhat);
                 if(mData != null)
                     msg.setData(mData);
                 msg.obj = obj;
                 msg.sendToTarget();
             }
             return obj;
        }    
    }

    更多的移动互联网的发展趋势app开发移动互联网应用相关的资料请到互联网的一点事www.yidin.net 留言

    android QQ群:222392467

    资料:

    http://www.yidin.net/?p=8280

    http://www.yidin.net/?p=9725

  • 相关阅读:
    【Unity】近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。
    extjs Combox 调用数据
    CSDN博客2014年4月24日清理缓存
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法訪问server。请验证实例名称是否正确而且 SQL Server 已配置为同意远程连接。
    海思 3520D 移植Qt4.5.3 一
    Android 输入框限制字符输入数
    Making User-Managed Backups-17.4、Making User-Managed Backups of Online Tablespaces and Datafiles
    spring 使用外部属性文件
    mysql字符串替换
    maven3+eclipse搭建webAPP企业级实战《一》
  • 原文地址:https://www.cnblogs.com/ondream/p/3068517.html
Copyright © 2011-2022 走看看