溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

解釋通訊協(xié)議中的xml

發(fā)布時間:2020-06-28 10:21:29 來源:網(wǎng)絡(luò) 閱讀:584 作者:yidinshi 欄目:開發(fā)技術(shù)

現(xiàn)在做的應(yīng)用基本離不網(wǎng)絡(luò),數(shù)據(jù)協(xié)議一般是使用 輕量級的 json 、xml,這篇文章分享一個解釋xml的功能

方便從網(wǎng)絡(luò)的字節(jié)流中提取字符串?dāng)?shù)據(jù)。

代碼如下:

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數(shù)據(jù)           
             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線程更新數(shù)據(jù)
             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;
    }  
}

更多的移動互聯(lián)網(wǎng)的發(fā)展趨勢、app開發(fā)、移動互聯(lián)網(wǎng)應(yīng)用相關(guān)的資料請到互聯(lián)網(wǎng)的一點(diǎn)事:www.yidin.net 留言

android QQ群:222392467

資料:

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

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


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI