使用步骤:

1.创建Url

2.用Url打开连接

3.设置请求参数

4. 获取响应状态码

  2xxx 请求成功 3xxx重定向 4xxx资源错误 5xxx服务器错误

5.获取服务器返回的二进制输入流

6.添加网络权限
  <uses-permission
android:name="android.permission.INTERNET"/>


示例代码:

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText etPath;
private ImageView iv;
private String path;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etPath = (EditText) findViewById(R.id.et_path);
// 在主线程中创建
iv = (ImageView) findViewById(R.id.iv);
}
// 1. 在主线程中创建Hanlder对象
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
// 把图片显示在imageview上
iv.setImageBitmap((Bitmap)msg.obj);
};
};
// 3. 在handleMessage()中修改UI /**
* 1. 获取服务器返回的二进制输入流
* 2. 把流转成位图对象
* 3. 把图片显示在imageview上
*/
public void look(View v) {
System.out.println("点击按钮的线程:" + Thread.currentThread().getName());
path = etPath.getText().toString().trim();
if (TextUtils.isEmpty(path) || !path.startsWith("http")) {
Toast.makeText(this, "请输入正确的网址", 0).show();
return;
}
// 开启线程
new Thread() {
public void run() {
requestNetWork();
};
}.start();
}
/**
* 网络通讯
*/
protected void requestNetWork() {
try {
// 1. 写一个Url
URL url = new URL(path);
// 2. 用这个Url打开http连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 3. 设置请求参数
// 不设置,默认就是get请求
conn.setRequestMethod("GET");
conn.setConnectTimeout(3000);
// 4. 获取状态吗
// * 2xxx响应成功 3xxx重定向 4xxx资源错误 5xxx服务器错误
int code = conn.getResponseCode();
if (code == 200) {
// 5. 获取服务返回的二进制输入流
InputStream is = conn.getInputStream();
// 把流转成位图对象
Bitmap bmp = BitmapFactory.decodeStream(is);
// 2. 在子线程中用handler发消息
Message msg = new Message();
msg.obj = bmp;
mHandler.sendMessage(msg);
} else {
// Toast.makeText(this, "code:"+code, 0).show();
}
} catch (Exception e) {
e.printStackTrace();
// Toast.makeText(this, "服务器忙", 0).show();
}
}
}

查看网络文字示例代码
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity { private static final int MSG_SUCC = 0;
private static final int MSG_ERR = 1;
private static final int MSG_ERR_CODE = 2;
private EditText etPath;
private TextView tvContent;
private String path;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etPath = (EditText) findViewById(R.id.et_path);
tvContent = (TextView) findViewById(R.id.tv);
}
/**
* 1. 获取用户输入的网址,做非空判断
* 2. 在子线程中进行网络通讯
* 3. 获取服务器返回的二进制数据流
* 4. 把流转成文字
* 5. 用Handler显示文字
*/
public void look(View v) {
// 获取用户输入的网址,做非空判断
path = etPath.getText().toString().trim();
if (TextUtils.isEmpty(path) || !path.startsWith("http")) {
Toast.makeText(this, "亲,请输入正确的网址,例如http开头", 0).show();
return;
}
// 在子线程中进行网络通讯
new Thread() {
public void run() {
requestNetWork();
};
}.start();
}
/**
* 获取服务器返回的二进制数据流
*/ protected void requestNetWork() {
try {
// 1. 写一个Url
URL url = new URL(path);
// 2. 用这个Url打开http连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 3. 设置请求参数
conn.setRequestMethod("GET");
conn.setConnectTimeout(3000);
// 4. 获取状态吗
// * 2xxx响应成功 3xxx重定向 4xxx资源错误 5xxx服务器错误
int code = conn.getResponseCode();
if (code == 200) {
// 5. 获取服务返回的二进制输入流
InputStream is = conn.getInputStream();
// 把流转成文字
String text = StringUtils.parseStream2Str(is);
// 用Handler显示文字
Message msg = Message.obtain();// 从消息池中获取消息
msg.obj = text;
msg.what = MSG_SUCC;
mHandler.sendMessage(msg);
} else {
Message msg = Message.obtain();// 从消息池中获取消息
msg.obj = code;
msg.what =MSG_ERR_CODE;
mHandler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); mHandler.sendEmptyMessage(MSG_ERR);
}
}
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_SUCC:
tvContent.setText((String) msg.obj);
break;
case MSG_ERR_CODE:
Toast.makeText(MainActivity.this, "code:"+msg.obj, 0).show();
break;
case MSG_ERR:
Toast.makeText(MainActivity.this, "服务器忙", 0).show();
break;
default:
break;
}
};
};
}

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
/**
* 操作字符
*/
public class StringUtils {
/**
* 从流中转成字符串
*
* @param is
* 输入流
* @return null表示失败
*/
public static String parseStream2Str(InputStream is) {
//内存输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = -1;
byte[] buffer = new byte[1024*8];
try {
while((len = is.read(buffer)) != -1){
baos.write(buffer, 0, len);
}
return new String(baos.toByteArray());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}

HttpURLConnection获取数据的更多相关文章

  1. java分别通过httpclient和HttpURLConnection获取图片验证码内容

    前面的文章,介绍了如何通过selenium+Tesseract-OCR来识别图片验证码,如果用接口来访问的话,再用selenium就闲的笨重,下面就介绍一下分别通过httpclient和HttpURL ...

  2. Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. (一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

    (一)----使用HttpClient发送HTTP请求(通过get方法获取数据) 一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是 ...

  4. 从api接口获取数据-okhttp

    首先先介绍下api接口: API:应用程序接口(API:Application Program Interface) 通常用于数据连接,调用函数提供功能等等... 从api接口获取数据有四种方式:Ht ...

  5. androidclient和站点数据交互的实现(基于Http协议获取数据方法)

    androidclient一般不直接訪问站点数据库,而是像浏览器一样发送get或者post请求.然后站点返回client能理解的数据格式,client解析这些数据.显示在界面上.经常使用的数据格式是x ...

  6. HttpClient获取数据

    HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议 ...

  7. WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案

    近日在使用wcf的restfull架构服务时遭遇到了提交大数据的问题. 大数据包含两种情形: 1)单条数据量过大. 2)提交或获取的数据条数过多. 在测试时发现,默认设置下当单条JSON数据大于30K ...

  8. python httplib get和post获取数据

    httplib 下的 status http请求的状态  200 404 500... reason 返回答复 OK或者 FAULRE read()  读取内容 get方法: #!/usr/bin/e ...

  9. 从SQLite获取数据完成一个产品信息展示

    在ios实际开发当中,我们常常用到Core Data做为数据储存首选.但在处理一些大量复杂的数据值且数据之间相互关联的时候,这就不得不使用关系型数据库来实现.例如一个导航程序,自身应该包含大量的地图自 ...

随机推荐

  1. Nagios4.x安装配置总结

    1.  Nagios介绍 Nagios是一个监视系统运行状态和网络信息的监视系统.Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等. Nagios可运行在Linux/Unix平 ...

  2. Linux学习笔记(五)Linux常用命令:压缩命令

    Linux中最常见的5中压缩格式: zip gz bz2 tar.gz tar.bz2 一..zip压缩命令 压缩文件 zip [压缩文件名] [源文件] 例如: zip zijeak.zip zij ...

  3. LoadRunner(2)

    一.性能测试的基本概念 1.并发和在线的区别:并发的压力是一种瞬时压力,一般针对同一类型业务:在线的压力是一段时间的压力,没有并发那么集中. 规律:一般20用户并发产生的压力相当于200用户在线的压力 ...

  4. 使用ADB命令写Android自动化测试脚本

    使用脚本来执行测试的特点: ●书写方便 ●基本上可以实现90%以上的功能性覆盖 ●测试结果需要通过自己观察整个过程和日志文件来得出的 ●有些外部的动作,脚本是无法实现的,比如录入指纹 ●只适配特定尺寸 ...

  5. [NOI2014]购票——斜率优化+树链剖分+线段树

    建议到UOJ上去交 题解 一眼\(DP\),先把转移方程写出来 设\(dp[i]\)为从点\(i\)出发到点\(1\)的最小费用,那么存在转移 \[f[i]=min\{f[j]+(d[i]-d[j]) ...

  6. ProjectEuler215 Crack-free Walls

    易知状态不会太多(\(3329\)个),直接搜一下,按照能不能连在后面建边,跑一遍dp即可 #include <bits/stdc++.h> using namespace std; st ...

  7. javascript 常用的一些原生方法

    一丶javascript------ reduce() reduce()方法: arr.reduce(function(prev,cur,index,arr){ ... }, init); 参数解释: ...

  8. spark-聚合算子aggregatebykey

    spark-聚合算子aggregatebykey Aggregate the values of each key, using given combine functions and a neutr ...

  9. 题解 【Uva】硬币问题

    [Uva]硬币问题 Description 有n种硬币,面值分别为v1, v2, ..., vn,每种都有无限多.给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值 ...

  10. PHP mysqli_field_tell() 函数

    mysqli_field_tell() 函数返回字段指针的位置. 取得所有字段的字段信息,然后通过 mysqli_field_tell() 取得当前字段并输出字段名称.表格和最大长度: <?ph ...