HttpURLConnection继承了URLConnection,因此也能够向指定站点发送GET请求、POST请求。它在URLConnetion的基础上提供了例如以下便捷的方法。

int getResponseCode():获取server的响应代码。



String getResponseMessage():获取server的訪问信息。

String getRequestMethod():获取发送请求的方法。

void setRequestMethod(String method):设置发送请求的方法。

我们通过两个样例来体会一下:

一、将站点的内容显示在界面上:

1、创建一个WebView

<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />

2、MainActivity.java

public class MainActivity extends Activity {

    private WebView webview;
//通过Handler在子线程更新主界面的UI
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView) findViewById(R.id.webView);
new HttpThread("http://www.sina.com", webview, handler).start();
}
}

3、创建一个子线程

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 httpUri = new URL(url);
HttpURLConnection conn = (HttpURLConnection) httpUri.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() {
//将数据载入到webview中
webview.loadData(sb.toString(), "text/html;charset=utf-8", null);
}
});
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

4、在AndroidManifest中加入权限:

android:name=”android.permission.INTERNET”

二、依据URL地址下载一张图片

1、创建一个webview

<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

2、MainActivity.java

public class MainActivity extends Activity {

    private Handler handler = new Handler();
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView1);
new HttpThread("http://img5.duitang.com/uploads/item/201410/23/20141023211631_VKmfz.jpeg", imageView, handler).start();
}

3、创建一个子线程



public class HttpThread extends Thread {
private String url;
private Handler handler;
private ImageView imageView;
public HttpThread(String url, ImageView imageView, Handler handler) {
this.url = url;
this.imageView = imageView;
this.handler = handler;
}
@Override
public void run() {
try {
URL httpUri = new URL(url);
HttpURLConnection conn = (HttpURLConnection) httpUri.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
//设置能够读取到输入流
conn.setDoInput(true);
InputStream in = conn.getInputStream();
FileOutputStream out = null;
String fileName = String.valueOf(System.currentTimeMillis());
File downloadFile = null;
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
//获得SDcard的文件夹文件
File parent = Environment.getExternalStorageDirectory();
downloadFile = new File(parent, fileName);
out = new FileOutputStream(downloadFile);
}
//缓冲区
byte[] b = new byte[2 * 1024];
int len;
if(out != null)
{
while((len = in.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);
}
});
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

4、在AndroidManifest中加入权限:

android:name=”android.permission.WRITE_EXTERNAL_STORAGE”

这样下载的图片就显示在界面上了。

最新文章

  1. MyEclipse web项目导入Eclipse,详细说明
  2. tar 解压bz2报错 Cannot exec: No such file or directory
  3. 如何在vim里删除空行?
  4. H5 调用摄像头
  5. Android中 int,float,Double,String 互相转换
  6. 【转】【MMX】 基于MMX指令集的程序设计简介
  7. 基于TF/IDF的聚类算法原理
  8. Linux系统下统计目录及其子目录文件个数
  9. Linux实战教学笔记08:Linux 文件的属性(下半部分)
  10. 在Ubuntu下配置Apache多域名服务器
  11. ue标签不见了,如何解决?
  12. c#中[Flags] 枚举类型定义问题_百度知道
  13. C#的类型、变量和值
  14. POJ1942 Paths on a Grid(组合)
  15. C# 中使用Newtonsoft.Json 处理JSON数据 绝对能用
  16. Ubuntu 14.1 构造NFS
  17. 遍历Map key-value的两种方法
  18. iOS视频压缩处理
  19. 一台机器启动多个tomcat简单配置
  20. MTK 快速开机 技术详解

热门文章

  1. Facebook为什么使用PHP编程语言?
  2. Chrome 75 将原生支持图片懒加载
  3. HDU 1027 Ignatius and the Princess II[DFS/全排列函数next_permutation]
  4. Careercup | Chapter 1
  5. Jenkins强制设置语言为中文
  6. PHP实现RabbitMQ的Publish/Subscribe
  7. centos中httpd Server not started: (13)Permission denied: make_sock: could not bind to address [::]:8888
  8. xamarin.android 资源图片问题
  9. EasyMvc入门教程-高级控件说明(15)方位布局控件
  10. IIC设备驱动程序