本文实例讲述了Android开发使用HttpURLConnection进行网络编程。分享给大家供大家参考,具体如下:

——HttpURLConnection

URLConnection已经可以非常方便地与指定站点交换信息,URLConnection下还有一个子类:HttpURLConnection,HttpURLConnection在URLConnection的基础上进行改进,增加了一些用于操作HTTP资源的便捷方法。

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

getResponseCode():获取服务器的响应代码

getResponseMessage():获取服务器的响应消息

a)get请求的代码:

conn=(HttpURLConnection)url.openConnection();

conn.setRequestMethod("GET");

conn.setConnectTimeout(8000);//连接超时的毫秒数

conn.setReadTimeout(8000);//读取超时的毫秒数

b)post请求的代码

conn=(HttpURLConnection)url.openConnection();

conn.setRequestMethod("POST");

c)关闭连接

if(conn!=null)conn.disconnect();

实现多线程下载的步骤:

a)创建URL对象

b)获取指定URL对象所指向资源的大小:getContentLength()

c)在本地磁盘上创建一个与网络资源相同大小的空文件

d)计算每条线程应用下载网络资源的指定部分

e)依次创建,启动多条线程来下载网络资源的指定部分

注意需要的权限:

这里我简单的使用一下HttpURLConnection来进行文本解析和图片解析

编程步骤如下:

1.先写布局文件:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="click"

android:text="加载图片"

/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:id="@+id/iv"/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="click2"

android:text="加载文本"

/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/tv"/>

2.在MainActivity中文本解析的实现:

//文本解析

public void click2(View view){

new Thread(){

public void run() {

try {

URL url2=new URL("http://www.baidu.com");

HttpURLConnection conn=(HttpURLConnection) url2.openConnection();

conn.setRequestMethod("GET");

conn.setConnectTimeout(8000);

conn.setReadTimeout(8000);

conn.connect();

if(conn.getResponseCode()==200){

InputStream inputStream=conn.getInputStream();

ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();

byte[]b=new byte[512];

int len;

while ((len=inputStream.read(b))!=-1) {

byteArrayOutputStream.write(b,0,len);

}

String text=new String(byteArrayOutputStream.toByteArray(),"UTF-8");

Message msg=Message.obtain();

msg.what=0x124;

msg.obj=text;

handler.sendMessage(msg);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

};

}.start();

}

这里使用了GET方式~也可以用POST方式~

3.在MainActivity中图片解析的实现:

//图片解析

public void click(View view){

final File file=new File(getCacheDir(),"2.png");

if(file.exists()){

System.out.println("使用缓存");

Bitmap bitmap=BitmapFactory.decodeFile(file.getAbsolutePath());

iv.setImageBitmap(bitmap);

}else{

new Thread(){

public void run() {

try {

URL url=new URL("http://192.168.207.1:8090/2.png");

System.out.println("使用网络");

HttpURLConnection conn=(HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");

conn.setConnectTimeout(8000);

conn.setReadTimeout(8000);

conn.connect();

if(200==conn.getResponseCode()){

//正常连接

InputStream is=conn.getInputStream();

//Bitmap bitmap=BitmapFactory.decodeStream(is);

FileOutputStream fileOutputStream=new FileOutputStream(file);

int len;

byte[] b=new byte[1024];

while ((len=is.read(b))!=-1) {

fileOutputStream.write(b,0,len);

}

fileOutputStream.close();

Bitmap bitmap=BitmapFactory.decodeFile(file.getAbsolutePath());

fileOutputStream.flush();

Message msg=Message.obtain();

msg.what=0x123;

msg.obj=bitmap;

handler.sendMessage(msg);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

};

}.start();

}

}

这个图片解析实现了图片的缓存,想要再一次加载图片的时候,就可以到缓存的文件中得到图片,就可以减少内存的使用~

这个图片我是放在服务器端的这个目录下\apache-tomcat-7.0.37\webapps\upload,从服务器上可以下载这个图片,然后保存在文件中~

4.最后,把文本和图片加载出来

private Handler handler=new Handler(){

public void handleMessage(android.os.Message msg) {

if(msg.what==0x123){

Bitmap bitmap=(Bitmap) msg.obj;

iv.setImageBitmap(bitmap);

}

else if(msg.what==0x124){

String text=(String) msg.obj;

tv.setText(text);

}

};

};

效果图我就不贴了,知道代码怎么写就行~

完整MainActivity代码如下:

public class MainActivity extends Activity {

private ImageView iv;

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

iv=(ImageView) findViewById(R.id.iv);

tv=(TextView) findViewById(R.id.tv);

}

private Handler handler=new Handler(){

public void handleMessage(android.os.Message msg) {

if(msg.what==0x123){

Bitmap bitmap=(Bitmap) msg.obj;

iv.setImageBitmap(bitmap);

}

else if(msg.what==0x124){

String text=(String) msg.obj;

tv.setText(text);

}

};

};

//文本解析

public void click2(View view){

new Thread(){

public void run() {

try {

URL url2=new URL("http://www.baidu.com");

HttpURLConnection conn=(HttpURLConnection) url2.openConnection();

conn.setRequestMethod("GET");

conn.setConnectTimeout(8000);

conn.setReadTimeout(8000);

conn.connect();

if(conn.getResponseCode()==200){

InputStream inputStream=conn.getInputStream();

ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();

byte[]b=new byte[512];

int len;

while ((len=inputStream.read(b))!=-1) {

byteArrayOutputStream.write(b,0,len);

}

String text=new String(byteArrayOutputStream.toByteArray(),"UTF-8");

Message msg=Message.obtain();

msg.what=0x124;

msg.obj=text;

handler.sendMessage(msg);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

};

}.start();

}

//图片解析

public void click(View view){

final File file=new File(getCacheDir(),"2.png");

if(file.exists()){

System.out.println("使用缓存");

Bitmap bitmap=BitmapFactory.decodeFile(file.getAbsolutePath());

iv.setImageBitmap(bitmap);

}else{

new Thread(){

public void run() {

try {

URL url=new URL("http://192.168.207.1:8090/2.png");

System.out.println("使用网络");

HttpURLConnection conn=(HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");

conn.setConnectTimeout(8000);

conn.setReadTimeout(8000);

conn.connect();

if(200==conn.getResponseCode()){

//正常连接

InputStream is=conn.getInputStream();

//Bitmap bitmap=BitmapFactory.decodeStream(is);

FileOutputStream fileOutputStream=new FileOutputStream(file);

int len;

byte[] b=new byte[1024];

while ((len=is.read(b))!=-1) {

fileOutputStream.write(b,0,len);

}

fileOutputStream.close();

Bitmap bitmap=BitmapFactory.decodeFile(file.getAbsolutePath());

fileOutputStream.flush();

Message msg=Message.obtain();

msg.what=0x123;

msg.obj=bitmap;

handler.sendMessage(msg);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

};

}.start();

}

}

}

附:完整实例代码点击此处本站下载。

希望本文所述对大家Android程序设计有所帮助。

android 网络编程实现,Android开发使用HttpURLConnection进行网络编程详解【附源码下载】...相关推荐

  1. android 原生开发 3d地图 下载_arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)...

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  2. python开发技术详解pdf下载_python开发技术详解附源码-python开发技术详解电子书pdf下载高清去水印版-精品下载...

    Python开发技术详解适合Python爱好者.大中专院校的学生.社会培训班的学生以及用Python语言进行系统管理.GUI开发.Web开发.数据库编程.网络编程的人员使用. 内容提要 Python是 ...

  3. Android 音视频深入 十七 FFmpeg 获取RTMP流保存为flv (附源码下载)

    项目地址 https://github.com/979451341/RtmpSave 这个项目主要代码我是从雷神那弄过来的,不愧是雷神,我就配个环境搞个界面就可以用代码了. 这一次说的是将RTMP流媒 ...

  4. Android 音视频深入 十八 FFmpeg播放视频,有声音(附源码下载)

    项目地址 https://github.com/979451341/AudioVideoStudyCodeTwo/tree/master/FFmpegv%E6%92%AD%E6%94%BE%E8%A7 ...

  5. arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  6. arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  7. arcgis api 3.x for js 入门开发系列五地图态势标绘(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  8. android flv 编码器,Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载)...

    Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载) 项目地址 https://github.com/979451341/RtmpSave 这个项目主要代码 ...

  9. Android应用Context详解及源码解析

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果] 1 背景 今天突然想起之前在上家公司(做TV与BOX盒子)时有好几个人问过我关于Android ...

  10. DSP:6678开发板NDK网口通信完整实现(附源码)

    如果出现图片打不开,或是显示异常,请点击下方链接阅读原文!!! DSP:6678开发板NDK网口通信完整实现(附源码) - 子木的文章 - 知乎 https://zhuanlan.zhihu.com/ ...

最新文章

  1. java-通过ip获取地址
  2. linux中搭建vue-cli
  3. Vue 中的作用域插槽
  4. MUI - 解决弹出输入法时页面高度变小导致底部上浮的问题
  5. 【干货】你不知道的 Linux 命令使用技巧
  6. paddle模块的详细介绍
  7. php $r,PHP
  8. react学习(4)----两个全选中就是key值一样了
  9. 光通量发光强度照度亮度关系_技术丨LED电子显示屏真实的亮度指数鉴别
  10. Request 获取网址各片段
  11. matlab数学建模试卷,matlab数学建模习题
  12. 解决redis 配置文件设置密码不生效的问题
  13. Systrace 解析
  14. 迅雷漫画下载工具II beta3 v1.2.3.204
  15. edm java_EDM推送
  16. Python+os+openpyxl 批量获取Excel的文件名和最大行数
  17. 同一个表单form,两个按钮button,调用同一个submit(),给action附不同的参数
  18. 如何下载Windows和office官方镜像安装包,及安装激活详细步骤
  19. 为了网络安全被束缚的无人机背后的故事!
  20. 最短路(三) A star Heuristics

热门文章

  1. Python3.8.5最新版安装教程(含老版本卸载教程)
  2. 人工智能在音频链中找到自己的声音
  3. CVPR2020论文点评: AdderNet(加法网络)
  4. 绘制多边形_XDGE_RayMarchine 1- 利用Frag Shader绘制图形
  5. cad沿线插入块 lisp_CAD制图软件中如何快速绘制推拉窗平面简图
  6. python rjust() 方法 与 ljust()方法 的使用
  7. python 怎样让 print 打印的结果不换行
  8. html style属性
  9. Linux环境kafka安装
  10. iOS蓝牙开发---CoreBluetooth[BLE 4.0] 初级篇[内附Demo地址]