使用步骤:

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. 12个提高Java程序员工作效率的工具

    Java开发者常常都会想办法如何更快地编写Java代码,让开发过程变得更加轻松,更加高效.目前,市面上涌现出越来越多的高效编程工具.团长总结了几个常用的工具,其中包含了大多数开发人员已经使用.正在使用 ...

  2. select —— poll —— epoll

      import socket,select s=socket.socket() s.setblocking(False) s.setsockopt(socket.SOL_SOCKET,socket. ...

  3. 洛谷P2341 [HAOI2006]受欢迎的牛 (Tarjan,SCC缩点)

    P2341 [HAOI2006]受欢迎的牛|[模板]强连通分量 https://www.luogu.org/problem/P2341 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就 ...

  4. RNN基础

    RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关.具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅 ...

  5. 关于从入 OI 以来学的各种知识点的系统总结

    前言 OI 之路差不多快结束了,最近水平也萎得很厉害,这里就开个目录,记录一些需要总结的知识点吧.不定期更,勿催,我还要改模拟赛的题. 目录

  6. percona-toolkit主从同步整理(MySQL)

    前言:MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重要.而数据作为软件的核心部分,对于其有效的管理显得更为重要.随着时间的推移,软件 ...

  7. 从程序员之死看 IT 人士如何摆脱低情商诅咒

    (1) IT公司的创业者苏享茂忽然跳楼自杀了,自杀前,他留下几万字的文字记录.遗书,并且在自己开发的软件界面上,设置了弹出页面,控诉是恶毒前妻逼死了自己. 生命戛然而止,留给亲人痛苦,留给世人震惊. ...

  8. Spring实战(第4版)

    第1部分 Spring的核心 Spring的两个核心:依赖注入(dependency injection,DI)和面向切面编程(aspec-oriented programming,AOP) POJO ...

  9. Path variable [contentHash:8] not implemented in this context: styles.[contentHash:8].css

    webPack 升级到 4.3.0 导致 extract-text-webpack-plugin 无法使用  

  10. sql server 安装

    第一次安装sql server是2016版本,因为[win7-64版系统配置比较低],所以不成功. 第二次安装2012版,在[数据库引擎配置]的时候,选择的是[添加当前用户],以及后续需要添加用户的时 ...