一、准备工作
- 进行网络编程时,就得有服务器;服务器可以使用电脑开启tomcat进行模拟。模拟机可以直接访问tomcat;当用真机运行时,可以让笔记本和手机连接同一无线网络或用笔记本开无线热点给手机连接也可以。
二、准备数据
- 可以准备一些数据放到Tomcat\apache-tomcat-8.0.36\webapps\ROOT目录下供访问,笔者准备的是一份json文件。
- MobilePhoneUpdate.json:
{
versionName:"2.0",
versionDesc:"这里有新版本",
versionCode:"2"
}
三、编程访问json文件
- 联网属于耗时操作,所以一定要开子线程。
new Thread(new Runnable() {
@Override
public void run() {
//发送请求,请求地址为json的链接地址
try {
//1.封装url
URL url = new URL("http://本机ip地址:8080/MobilePhoneUpdate.json");
//2.开启一个链接
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//3.设置请求头
//请求超时时间
urlConnection.setConnectTimeout(5000);
//读取超时时间
urlConnection.setReadTimeout(5000);
//设置请求方式(默认为GET,本处可以不设置)
urlConnection.setRequestMethod("GET");
//4.获取请求响应码
int code = urlConnection.getResponseCode();
//如果请求码等于200,说明连接成功
if (code == 200) {
//5.以流形式,将数据读取下来
InputStream in = urlConnection.getInputStream();
//6.自定义工具类,将流转换成字符串(封装工具类)
String json = StreamUtil.streamToString(in);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
- 定义工具类,将流转换成字符串,这里提供两种方法。
package com.example.administrator.mobilesafe.utils;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* Created by Administrator on 2016/11/28.
*/
public class StreamUtil {
/**
* 将流转换成字符串
* @param in 流对象
* @return 返回字符串,返回null代表异常
*/
public static String streamToString(InputStream in) {
//1.将数据读到缓存,然后一次性转换成字符串
ByteArrayOutputStream bos = new ByteArrayOutputStream();
//2.设置每次读取的大小
byte[] buffer = new byte[1024];
//3.记录读取内容的临时变量
int len ;
try {
while ((len = in.read(buffer)) != -1){
bos.write(buffer,0,len);
}
//4.返回数据
return bos.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 将流转换成字符串
* @param in 流对象
* @return 返回字符串,返回null代表异常
*/
public static String streamToString1(InputStream in){
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder builder = new StringBuilder();
String line ;
try {
while ((line = reader.readLine()) != null){
builder.append(line);
}
return builder.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
- 联网要在清单文件中加权限。
<uses-permission android:name="android.permission.INTERNET"/>
- 将数据流转换成字符串之后,接下来就是对数据字符串进行解析了,这里笔者就不详细介绍了