1.Pull解析方式是用于向服务器发送请求后,解析所接收的xml文件,所以想知道Pull方法,前提是对基本的发送请求方法略有了解。
2.那我们就来了解一下最为常用的OkHttp请求方式把:
OkHttpClient client=new OkHttpClient() ;//首先创建一个OkHttpClient对象
Request request=new Request.Builder().url("http://10.0.2.2/get_data.xml").build();//创建一个服务对象,我们还可以在中间加其他的方法,url()就是我们要请求的网址
Response response=client.newCall(request).execute();
String s=response.body().string();//最后接收回来的就是xml文件
3.我们都知道xml文件都是由一对对键值里面嵌套着其属性值的编辑方式,Pull就是根据根据判断每一个节点是开始,还是结束,来获取相对应的值。
package com.example.gdzc.networktest;
import android.app.DownloadManager;
import android.app.VoiceInteractor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
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.HttpURLConnection;
import java.net.URL;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button)findViewById(R.id.button);
textView=(TextView)findViewById(R.id.response);
button.setOnClickListener(this);
}
public void onClick(View view)
{
if(view.getId()==R.id.button)
{
sendRequest();
}
}
private void sendRequest()
{
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 s=response.body().string();
parseXMLWidthPull(s);
}catch (Exception e)
{
e.printStackTrace();
}
}
}).start();
}
private void showResponse(final String response)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(response);
}
});
}
private void parseXMLWidthPull(String s)
{
try {
XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser=factory.newPullParser();
xmlPullParser.setInput(new StringReader(s));
int event=xmlPullParser.getEventType();
String id="";
String name="";
String version="";
while (event!=XmlPullParser.END_DOCUMENT)
{
String name1=xmlPullParser.getName();
switch (event)
{
case XmlPullParser.START_TAG:
{
if("id".equals(name1))
id=xmlPullParser.nextText();
else if("name".equals(name1))
name=xmlPullParser.nextText();
else if("version".equals(name1))
version=xmlPullParser.nextText();
}
break;
case XmlPullParser.END_TAG:
{
if("app".equals(name1))
{
Log.d("Main","id is"+id);
Log.d("Main","name is"+name);
Log.d("Main","version is"+version);
}
break;
}
default:
break;
}
event=xmlPullParser.next();
}
}catch (Exception e)
{
e.printStackTrace();
}
}
}