Android中的Http通信(二)
2016-03-26 12:28
501 查看
> 这篇博客紧接上一篇:Android中的Http通信(一),讲述Http通信。本文分别用两个例子说明:
> 网络请求到百度的网页,展示到一个webview上。
> 网络请求一张图片,展示到界面的ImageView上。
1.3 HttpUrlConnection介绍。
1.3.1 网络请求到百度的网页,展示到一个webview上。
> 首先创建一个工程Http_01。为了能够访问网络,必须在清单文件中声明网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
在activity_main.xml布局文件中声明一个WebView控件,将访问网络的信息显示在webView上:
<span style="white-space:pre"> </span><WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true" />在MainActivity中初始化webView。为了访问网络,因为访问网络是个耗时操作,所以放在一个线程中去执行。新建一个java文件HttpThread类,在这个类中实现网络访问:
new HttpThread("http://www.baidu.com", webView, handler).start();运行工程效果如图:
1.3.2
网络请求一张图片,展示到界面的ImageView上。
> 接下来我们再从网络请求一张图片展示到界面上。将原来activity_main.xml布局文件中的WebView控件设置成隐藏,新声明一个ImageView控件,用来展示图片:
<span style="white-space:pre"> </span><ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />在MainActivity中初始化imageView。然后在HttpThread类中实现网络获取图pain的逻辑,代码如下:
<span style="white-space:pre"> </span>// 构造函数,初始化变量
public HttpThread(String url, ImageView imageView, Handler handler) {
this.url = url;
this.imageView = imageView;
this.handler = handler;
}
@Override
public void run() {
try {
URL httpUrl = new URL(url);
try {
HttpURLConnection conn = (HttpURLConnection) httpUrl
.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
InputStream is = conn.getInputStream();
FileOutputStream out = null;
File downloadFile = null;
String fileName = String.valueOf(System.currentTimeMillis());
// 判断sd卡是否处于挂载状态
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 获取sd卡的目录作为下载图片的父目录
File parent = Environment.getExternalStorageDirectory();
// 创建存放下载网络图片的文件目录
downloadFile = new File(parent, fileName);
out = new FileOutputStream(downloadFile);
}
/*
* 通过流的形式将网络图片下载到文件downloadFile中
*/
byte[] b = new byte[2 * 1024];
int len;
if (out != null) {
while ((len = is.read(b)) != -1) {
out.write(b, 0, len);
}
}
final Bitmap bitmap = BitmapFactory.decodeFile(downloadFile
.getAbsolutePath());
handler.post(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(bitmap);
}
});
/*
* final StringBuffer sb = new StringBuffer(); BufferedReader
* reader = new BufferedReader( new
* InputStreamReader(conn.getInputStream())); String str; while
* ((str = reader.readLine()) != null) { sb.append(str); }
*
* handler.post(new Runnable() {
*
* @Override public void run() { // TODO Auto-generated method
* stub webView.loadData(sb.toString(),
* "text/html;charset=utf-8", null); } });
*/
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}回到MainActivity中,对原来新建的HttpThread线程进行修改:
new HttpThread("<span style="color:#ff0000;">http://img.ivsky.com/img/bizhi/pic/201012/24/aodaili_heben-001.jpg</span>", <span style="color:#ff0000;">imageView</span>, handler).start();上面的http://img.ivsky.com/img/bizhi/pic/201012/24/aodaili_heben-001.jpg是一张网络图片(奥黛丽·赫本)的照片。
因为在代码中我们对sd卡进行了操作,所以还需再清单文件中配置外存储卡可写的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />运行工程,程序界面就会显示从网络获取的图片。如图:
以上就是两个例子。
ps:本文接着下一篇文章:Android中的Http通信(三)
> 本文的代码链接http://download.csdn.net/detail/programmerteny/9473219,
可下载研究。
> 网络请求到百度的网页,展示到一个webview上。
> 网络请求一张图片,展示到界面的ImageView上。
1.3 HttpUrlConnection介绍。
1.3.1 网络请求到百度的网页,展示到一个webview上。
> 首先创建一个工程Http_01。为了能够访问网络,必须在清单文件中声明网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
在activity_main.xml布局文件中声明一个WebView控件,将访问网络的信息显示在webView上:
<span style="white-space:pre"> </span><WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true" />在MainActivity中初始化webView。为了访问网络,因为访问网络是个耗时操作,所以放在一个线程中去执行。新建一个java文件HttpThread类,在这个类中实现网络访问:
<span style="color:#330033;">public class HttpThread extends Thread { private String url; private WebView webView; private Handler handler; // 构造函数,初始化变量 public HttpThread(String url, WebView webView, Handler handler) { this.url = url; this.webView = webView; this.handler = handler; } @Override public void run() { try { URL httpUrl = new URL(url); try { HttpURLConnection conn = (HttpURLConnection) httpUrl .openConnection(); conn.setReadTimeout(5000); conn.setRequestMethod("GET"); final StringBuffer sb = new StringBuffer(); BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); String str; while ((str = reader.readLine()) != null) { sb.append(str); } handler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub webView.loadData(sb.toString(), </span><span style="color:#ff0000;">"text/html;charset=utf-8",</span><span style="color:#330033;"> null); } }); } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } } }</span>上面代码中红色部分为百度页面源代码中content内容所引部分。完成了上面的内容,然后在MainActivity.java的onCreate()方法中去开启HttpThread:
new HttpThread("http://www.baidu.com", webView, handler).start();运行工程效果如图:
1.3.2
网络请求一张图片,展示到界面的ImageView上。
> 接下来我们再从网络请求一张图片展示到界面上。将原来activity_main.xml布局文件中的WebView控件设置成隐藏,新声明一个ImageView控件,用来展示图片:
<span style="white-space:pre"> </span><ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />在MainActivity中初始化imageView。然后在HttpThread类中实现网络获取图pain的逻辑,代码如下:
<span style="white-space:pre"> </span>// 构造函数,初始化变量
public HttpThread(String url, ImageView imageView, Handler handler) {
this.url = url;
this.imageView = imageView;
this.handler = handler;
}
@Override
public void run() {
try {
URL httpUrl = new URL(url);
try {
HttpURLConnection conn = (HttpURLConnection) httpUrl
.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
InputStream is = conn.getInputStream();
FileOutputStream out = null;
File downloadFile = null;
String fileName = String.valueOf(System.currentTimeMillis());
// 判断sd卡是否处于挂载状态
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 获取sd卡的目录作为下载图片的父目录
File parent = Environment.getExternalStorageDirectory();
// 创建存放下载网络图片的文件目录
downloadFile = new File(parent, fileName);
out = new FileOutputStream(downloadFile);
}
/*
* 通过流的形式将网络图片下载到文件downloadFile中
*/
byte[] b = new byte[2 * 1024];
int len;
if (out != null) {
while ((len = is.read(b)) != -1) {
out.write(b, 0, len);
}
}
final Bitmap bitmap = BitmapFactory.decodeFile(downloadFile
.getAbsolutePath());
handler.post(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(bitmap);
}
});
/*
* final StringBuffer sb = new StringBuffer(); BufferedReader
* reader = new BufferedReader( new
* InputStreamReader(conn.getInputStream())); String str; while
* ((str = reader.readLine()) != null) { sb.append(str); }
*
* handler.post(new Runnable() {
*
* @Override public void run() { // TODO Auto-generated method
* stub webView.loadData(sb.toString(),
* "text/html;charset=utf-8", null); } });
*/
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}回到MainActivity中,对原来新建的HttpThread线程进行修改:
new HttpThread("<span style="color:#ff0000;">http://img.ivsky.com/img/bizhi/pic/201012/24/aodaili_heben-001.jpg</span>", <span style="color:#ff0000;">imageView</span>, handler).start();上面的http://img.ivsky.com/img/bizhi/pic/201012/24/aodaili_heben-001.jpg是一张网络图片(奥黛丽·赫本)的照片。
因为在代码中我们对sd卡进行了操作,所以还需再清单文件中配置外存储卡可写的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />运行工程,程序界面就会显示从网络获取的图片。如图:
以上就是两个例子。
ps:本文接着下一篇文章:Android中的Http通信(三)
> 本文的代码链接http://download.csdn.net/detail/programmerteny/9473219,
可下载研究。
相关文章推荐
- 使用JAVA实现http通信详解
- Socket和Http通信
- Android中的Http通信(一)
- Android开发_网络编程之Http通信
- WebService_java编写Webservice_Axis2_1.6
- 【socket】socket介绍-socket与http服务通信
- [Unity3D]Warensoft Unity3d Communication http通信中问题若干
- Silverlight杂记之HTTP通信WebClient介绍
- Android设备与电脑Http通信简单搭建
- 文加图, 理解Http请求与响应
- HttpUtil工具类
- HTTP网络连接相关知识整理(一):http连接与Socket连接
- Web 通信 之长连接、长轮询(long polling)(前端 ajax)
- JAVA爬虫初识之HTTP通信机制
- 【网络文摘】面试感悟:3年工作经验程序员应有的技能
- Java.net.URLConnection和Apache HTTPClient的主要区别对比
- iOS网络开发中的同步、异步和请求队列
- iOS网络开发中的同步、异步和请求队列
- 码农小汪-struts2学习8-Action中获取ActionContext,ServletActionContext,HttpServletRequest......
- Apache Http Server与Tomcat实现负载均衡和集群