XML檔案建立已經Apache服務器建立已經在上一篇介紹過,此處不再多過闡述
正文:
添加jar包
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
閉包里申請網路權限
<uses-permission android:name="android.permission.INTERNET"/>
布局檔案中就一個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();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/260623.html
標籤:其他
上一篇:Android評論功能的制作詳解
