加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解释通讯协议中的xml

发布时间:2020-12-15 23:48:11 所属栏目:百科 来源:网络整理
导读:现在做的应用基本离不网络,数据协议一般是使用 轻量级的 json 、xml,这篇文章分享一个解释xml的功能 方便从网络的字节流中提取字符串数据。 代码如下: public class XMLLoader { public interface OnLoadXMLCompletedListener{ public void onLoadXMLComp

现在做的应用基本离不网络,数据协议一般是使用 轻量级的 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,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,Handler listener,Bundle data) {
        mUrl = url;
        mHandler = handler;
        mHListener = listener;
        mWhat = what;
        mData = data;
        Util.log(TAG,new URLLoader.OnLoadFinishedListener() {
                
            @Override
            public void onFinish(InputStream is) {
                parser(is);            
            }
        });
    }
    public void load(InputStream is,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,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,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,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读