XML文件建立已经Apache服务器建立已经在上一篇介绍过,此处不再多过阐述
正文:
添加jar包

implementation 'com.squareup.okhttp3:okhttp:3.4.1'

闭包里申请网络权限

布局文件中就一个Button,此处不再阐述,解析的XML数据将以日志方式体现
建立一个ContentHandler类并继承DefaultHandler类,并重写父类的5个方法
ContentHandler.java代码如下:

public class ContentHandler extends DefaultHandler {    private String nodeName;    private StringBuilder id;    private StringBuilder name;    private StringBuilder version;    //开始解析XML文件    @Override    public void startDocument() throws SAXException {        super.startDocument();        id = new StringBuilder();        name = new StringBuilder();        version = new StringBuilder();    }    //开始解析某个节点    @Override    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {        super.startElement(uri, localName, qName, attributes);        nodeName = localName;    }   //获取某个节点的内容    @Override    public void characters(char[] ch, int start, int length) throws SAXException {        super.characters(ch, start, length);        if ("id".equals(nodeName)){            id.append(ch, start, length);        }else if ("name".equals(nodeName)){            name.append(ch, start, length);        }else if ("version".equals(nodeName)){            version.append(ch, start, length);        }    }  //完成某个节点解析    @Override    public void endElement(String uri, String localName, String qName) throws SAXException {        super.endElement(uri, localName, qName);        if ("app".equals(nodeName)) {            Log.d("ID = ", id.toString().trim());            Log.d("Name = ", name.toString().trim());            Log.d("Version = ", version.toString().trim());            //清空StringBuilder            id.setLength(0);            name.setLength(0);            version.setLength(0);        }    }  //完成整个XML文件解析    @Override    public void endDocument() throws SAXException {        super.endDocument();    }}

MainActivity.java代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private Button SendRequest;    private TextView ResponseText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        SendRequest = (Button) findViewById(R.id.SendRequest);        ResponseText = (TextView)findViewById(R.id.Response);        SendRequest.setOnClickListener(this);    }    @Override    public void onClick(View v) {      if (v.getId() == R.id.SendRequest){          SendRequestToOkhttp();      }    }    private void SendRequestToOkhttp() {        new Thread(new Runnable() {            @Override            public void run() {                try {                    OkHttpClient Client = new OkHttpClient();                    //本机ip地址                    Request request = new Request.Builder().url("http://192.168.0.60:8888/data.xml").build();//发送请求                    Response response = Client.newCall(request).execute();//发送请求并获取服务器返回的数据                    String ResponseData = response.body().string();//获取具体数据                    ParseXMLWithSAX(ResponseData);//显示数据                } catch (Exception e) {                    e.printStackTrace();                }            }        }).start();    }    private void ParseXMLWithSAX(String XMLData){        try{            SAXParserFactory factory = SAXParserFactory.newInstance();//获取SAXParserFactory实例            XMLReader xmlReader = factory.newSAXParser().getXMLReader();            ContentHandler handler = new ContentHandler();            xmlReader.setContentHandler(handler);            //开始解析            xmlReader.parse(new InputSource(new StringReader(XMLData)));        }catch (Exception e){            e.printStackTrace();        }    }}

更多相关文章

  1. 运行时权限解析以及申请的实现(可完美解决java.lang.SecurityExce
  2. Android(安卓)APK应用安装原理(1)-解析AndroidManifest原理-Pack
  3. Android(安卓)ApiDemos示例解析(94):Text->Marquee
  4. Android联系人数据库全解析(1)
  5. android状态机statemachine详解
  6. Android系统架构解析
  7. Android(安卓)采用PULL来解析XML
  8. Google工程师解析Android系统架构
  9. android lru缓存 辅助类LruCache源码解析

随机推荐

  1. android activity之间共享数据(applicatio
  2. Rxjava入门
  3. Google VR for Android(安卓)- Getting S
  4. Android地图Key
  5. 这也许是Android一句话权限适配的更优解
  6. Android:Native C code打印android log
  7. Android(安卓)dp方式的屏幕适配工具使用(
  8. AutoCompleteTextView的简单使用
  9. android 获取超级管理员权限,进行锁屏、恢
  10. android 数据存储技术