package com.example.thinkpad.http; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.util.Xml; import android.view.View; import android.widget.Button; import android.widget.TextView; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import java.net.URL; import javax.net.ssl.HttpsURLConnection; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class Main2Activity extends AppCompatActivity implements View.OnClickListener { TextView responseText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button sendRequest=(Button) findViewById(R.id.send_request); responseText=(TextView) findViewById(R.id.response_text); sendRequest.setOnClickListener(this); } @Override public void onClick(View v){ if(v.getId()==R.id.send_request){ sendRequestWithOkHttp();//使用OkHttp框架向网页请求数据 } } private void sendRequestWithOkHttp(){//请求数据,和发起解析XML函数 //开启线程来发起网络请求 new Thread(new Runnable() { @Override public void run() { try{ OkHttpClient client=new OkHttpClient(); Request request=new Request.Builder() .url("http://10.0.2.2/get_data.xml") .build(); Response response=client.newCall(request).execute(); String responseData=response.body().string(); parseXMLWithPull(responseData); }catch(Exception e){ e.printStackTrace(); } } }).start(); } private void parseXMLWithPull(String xmlData){//解析函数 try{ XmlPullParserFactory factory= XmlPullParserFactory.newInstance();获取XmlPullParserFactory实例 XmlPullParser xmlPullParser=factory.newPullParser();获取XmlPullParser实例 xmlPullParser.setInput(new StringReader(xmlData));将返回的数据设置进去 int eventType=xmlPullParser.getEventType();//设置初始节点。 String id=""; String name=""; String version=""; while(eventType!=XmlPullParser.END_DOCUMENT){ String nodename =xmlPullParser.getName(); switch(eventType){//判断标签类型 //开始解析某个节点 case XmlPullParser.START_TAG:{//开始标签 if("id".equals(nodename)){ id=xmlPullParser.nextText(); }else if("name".equals(nodename)){ name=xmlPullParser.nextText(); }else if("version".equals(nodename)){ version=xmlPullParser.nextText(); } break; } //完成解析某个节点 case XmlPullParser.END_TAG:{//结束标签 if("app".equals(nodename)){ Log.d("mainActivity2","id is"+id); Log.d("mainActivity2","name is"+name); Log.d("mainActivity2","version is"+version); } break; } default: break; } eventType =xmlPullParser.next();移向下一个节点。 } }catch (Exception e){ e.printStackTrace(); } } private void showResponse(final String response){ runOnUiThread(new Runnable() { @Override public void run() { //在这里UI操作,将结果显示到界面上 responseText.setText(response); } }); } }
XML文件代码如下
<apps> <app> <id>1</id> <name>Google Maps</name> <version>1.0</version> </app> <app> <id>2</id> <name>Chrome</name> <version>2.1</version> </app> <app> <id>3</id> <name>google play</name> <version>2.3</version> </app> </apps>
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' compile 'com.squareup.okhttp3:okhttp:3.4.1' }