1. 从 Internet 获取网页
发送请求, 将网页以流的形式读回来 .
Java 代码
1) 创建一个 URL 对象 :URL url = new URL("http://www.sohu.com");
2) 利用 HttpURLConnection 对象从网络中获取网页数据 :HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3) 设置连接超时 :conn.setConnectTimeout(6* 1000);
4) 对响应码进行判断 :if (conn.getResponseCode() != 200) throw new RuntimeException(" 请求 url 失败 ");
5) 得到网络返回的输入流 :InputStream is = conn.getInputStream();
6)String result = readData(is, "GBK");
conn.disconnect();
1) 创建一个 URL 对象 :URL url = new URL("http://www.sohu.com");
2) 利用 HttpURLConnection 对象从网络中获取网页数据 :HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3) 设置连接超时 :conn.setConnectTimeout(6* 1000);
4) 对响应码进行判断 :if (conn.getResponseCode() != 200) throw new RuntimeException(" 请求 url 失败 ");
5) 得到网络返回的输入流 :InputStream is = conn.getInputStream();
6)String result = readData(is, "GBK");
conn.disconnect();
总结:
-- 我们必须要记得设置连接超时 , 如果网络不好 ,Android 系统在超过默认时间会收回资源中断操作 .
-- 返回的响应码 200, 是成功 .
-- 利用 ByteArrayOutputStream 类 , 将得到的输入流写入内存 .
-- 在 Android 中对文件流的操作和 JAVA SE 上面是一样的 .
2. 从 Internet 获取文件
利用HttpURLConnection 对象 , 我们可以从网络中获取文件数据 .
Java 代码
1) 创建 URL 对象 , 并将文件路径传入 :URL url = new URL("http://photocdn.sohu.com/20100125/Img269812337.jpg");
2) 创建 HttpURLConnection 对象 , 从网络中获取文件数据 :HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3) 设置连接超时 :conn.setConnectTimeout(6* 1000);
4) 对响应码进行判断 :if (conn.getResponseCode() != 200) throw new RuntimeException(" 请求 url 失败 ");
5) 得到网络返回的输入流 :InputStream is = conn.getInputStream();
6)将得到的文件流写出 :outStream.write(buffer, 0, len);
1) 创建 URL 对象 , 并将文件路径传入 :URL url = new URL("http://photocdn.sohu.com/20100125/Img269812337.jpg");
2) 创建 HttpURLConnection 对象 , 从网络中获取文件数据 :HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3) 设置连接超时 :conn.setConnectTimeout(6* 1000);
4) 对响应码进行判断 :if (conn.getResponseCode() != 200) throw new RuntimeException(" 请求 url 失败 ");
5) 得到网络返回的输入流 :InputStream is = conn.getInputStream();
6) 将得到的文件流写出 :outStream.write(buffer, 0, len);
总结:
-- 在对大文件的操作时 , 要将文件写到 SDCard 上面 , 不要直接写到手机内存上 .
-- 操作大文件是 , 要一遍从网络上读 , 一遍要往 SDCard 上面写 , 减少手机内存的使用 . 这点很重要 , 面试经常会被问到 .
-- 对文件流操作完 , 要记得及时关闭 .
3. 向 Internet 发送请求参数
Java 代码
1) 将地址和参数存到 byte 数组中 :byte[] data = params.toString().getBytes();
2) 创建 URL 对象 :URL realUrl = new URL(requestUrl);
3) 通过 HttpURLConnection 对象 , 向网络地址发送请求 :HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
4) 设置容许输出 :conn.setDoOutput(true);
5) 设置不使用缓存 :conn.setUseCaches(false);
6) 设置使用 POST 的方式发送 :conn.setRequestMethod("POST");
7) 设置维持长连接 :conn.setRequestProperty("Connection", "Keep-Alive");
8) 设置文件字符集 :conn.setRequestProperty("Charset", "UTF-8");
9) 设置文件长度 :conn.setRequestProperty("Content-Length", String.valueOf(data.length));
10) 设置文件类型 :conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
11) 以流的方式输出 .
1) 将地址和参数存到 byte 数组中 :byte[] data = params.toString().getBytes();
2) 创建 URL 对象 :URL realUrl = new URL(requestUrl);
3) 通过 HttpURLConnection 对象 , 向网络地址发送请求 :HttpURLConnection conn =
(HttpURLConnection) realUrl.openConnection();
4) 设置容许输出 :conn.setDoOutput(true);
5) 设置不使用缓存 :conn.setUseCaches(false);
6) 设置使用 POST 的方式发送 :conn.setRequestMethod("POST");
7) 设置维持长连接 :conn.setRequestProperty("Connection", "Keep-Alive");
8) 设置文件字符集 :conn.setRequestProperty("Charset", "UTF-8");
9) 设置文件长度 :conn.setRequestProperty("Content-Length", String.valueOf(data.length));
10) 设置文件类型 :conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
11) 以流的方式输出 .
总结:
-- 发送 POST 请求必须设置允许输出
-- 不要使用缓存 , 容易出现问题 .
-- 在开始用 HttpURLConnection 对象的 setRequestProperty() 设置 , 就是生成 HTML 文件头 .
4. 向 Internet 发送 xml 数据
XML 格式是通信的标准语言 ,Android 系统也可以通过发送 XML 文件传输数据 .
Java 代码
1) 将生成的 XML 文件写入到 byte 数组中 , 并设置为 UTF-8:byte[] xmlbyte = xml.toString().getBytes("UTF-8");
2) 创建 URL 对象 , 并指定地址和参数 :URL url = new URL("http://localhost:8080/itcast/contanctmanage.do?method=readxml");
3) 获得链接 :HttpURLConnection conn = (HttpURLConnection) url.openConnection();
4) 设置连接超时 :conn.setConnectTimeout(6* 1000);
5) 设置允许输出 conn.setDoOutput(true);
6) 设置不使用缓存 :conn.setUseCaches(false);
7) 设置以 POST 方式传输 :conn.setRequestMethod("POST");
8) 维持长连接 :conn.setRequestProperty("Connection", "Keep-Alive");
9) 设置字符集 :conn.setRequestProperty("Charset", "UTF-8");
10) 设置文件的总长度 :conn.setRequestProperty("Content-Length", String.valueOf(xmlbyte.length));
11) 设置文件类型 :conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
12) 以文件流的方式发送 xml 数据 :outStream.write(xmlbyte);
1) 将生成的 XML 文件写入到 byte 数组中 , 并设置为 UTF-8:byte[] xmlbyte =
xml.toString().getBytes("UTF-8");
2) 创建 URL 对象 , 并指定地址和参数 :URL url = new URL("http://localhost:8080/itcast/contanctmanage.do?method=readxml");
3) 获得链接 :HttpURLConnection conn = (HttpURLConnection) url.openConnection();
4) 设置连接超时 :conn.setConnectTimeout(6* 1000);
5) 设置允许输出 conn.setDoOutput(true);
6) 设置不使用缓存 :conn.setUseCaches(false);
7) 设置以 POST 方式传输 :conn.setRequestMethod("POST");
8) 维持长连接 :conn.setRequestProperty("Connection", "Keep-Alive");
9) 设置字符集 :conn.setRequestProperty("Charset", "UTF-8");
10) 设置文件的总长度 :conn.setRequestProperty("Content-Length", String.valueOf(xmlbyte.length));
11) 设置文件类型 :conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
12) 以文件流的方式发送 xml 数据 :outStream.write(xmlbyte);
总结:
-- 我们使用的是用 HTML 的方式传输文件 , 这个方式只能传输一般在 5M 一下的文件 .
-- 传输大文件不适合用 HTML 的方式 , 传输大文件我们要面向 Socket 编程 . 确保程序的稳定性 .