首先需要创建一个xml文件以让程序获取:
- 下载安装apache
- 在hotdocs目录下新建一个文件get_data.xml(这里记事本创建不了,我用sublime创建),内容如下:
<apps><app><id>1</id><name>Google Map</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>3.1</version></app></apps>
- 正文:
public class NetWorkTestActivity extends AppCompatActivity implements View.OnClickListener{
TextView responseText;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.networktest_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){
//sendRequestWithHTTPURLConnection();
sendRequestWithOKHttp();
}
}
private void sendRequestWithOKHttp() {
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder()
.url("http://10.0.2.2/get_data.xml")
.build();
Response response=null;
try {
response=client.newCall(request).execute();
String responseData=response.body().string();
parseXMLWithPull(responseData);
showResponse(responseData);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private void parseXMLWithPull(String responseData) {
try {
XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser=factory.newPullParser();
xmlPullParser.setInput(new StringReader(responseData));
String id="";
String name="";
String version="";
int eventType=xmlPullParser.getEventType();
while(eventType!=xmlPullParser.END_DOCUMENT)
{
String nodeName=xmlPullParser.getName();
switch (eventType){
case XmlPullParser.START_TAG:
if ("id".equals(nodeName))
{
try {
id=xmlPullParser.nextText();
} catch (IOException e) {
e.printStackTrace();
}
}
else if ("name".equals(nodeName))
{
try {
name=xmlPullParser.nextText();
} catch (IOException e) {
e.printStackTrace();
}
}
else if ("version".equals(nodeName))
{
try {
version=xmlPullParser.nextText();
} catch (IOException e) {
e.printStackTrace();
}
}
break;
case XmlPullParser.END_TAG:
if ("app".equals(nodeName))
{
Log.v("Main","id is"+id);
Log.v("Main","name is"+name);
Log.v("Main","version is"+version);
}
break;
default:
break;
}
try {
eventType=xmlPullParser.next();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
private void sendRequestWithHTTPURLConnection() {
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection=null;
BufferedReader reader=null;
try {
URL url=new URL("http://baidu.com");
connection= (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
InputStream in=connection.getInputStream();
reader=new BufferedReader(new InputStreamReader(in));
StringBuilder response=new StringBuilder();
String line;
while ((line=reader.readLine())!=null){
response.append(line);
}
showResponse(response.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
if (reader!=null)
{
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
if (connection!=null)
{
connection.disconnect();
}
}
}
}
}).start();
}
private void showResponse(final String s) {
runOnUiThread(new Runnable() {
@Override
public void run() {
responseText.setText(s);
}
});
}
}
这里使用了OKHttp库,需要在build.gradle中添加配置:
compile 'com.squareup.okhttp3:okhttp:3.8.1'
需要注意的有:
1.模拟器上电脑本地地址为:10.0.2.2
2.目前我只能在模拟器上跑,在真机上可能解析不了电脑本地地址。