热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android开发使用HttpURLConnection进行网络编程详解【附源码下载】

这篇文章主要介绍了Android开发使用HttpURLConnection进行网络编程的方法,结合实例形式分析了Android基于HttpURLConnection实现显示图片与文本功能,涉及Android布局、文本解析、数据传输、权限控制等相关操作技巧,需要的朋友可以参考下

本文实例讲述了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)依次创建,启动多条线程来下载网络资源的指定部分

注意需要的权限:




更多关于Android权限控制的说明可参考Android Manifest功能与权限描述大全

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

编程步骤如下:

1.先写布局文件:


 

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开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

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


推荐阅读
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 在使用Maven进行项目构建时,由于依赖库的下载速度慢常常让人感到沮丧,这直接影响了开发效率和学习热情。幸运的是,阿里云提供了一个快速的国内镜像服务,能够显著提升Maven项目的构建速度。 ... [详细]
  • Android中解析XML文件的实践指南
    本文详细介绍了在Android应用开发中解析XML文件的方法,包括从本地文件和网络资源获取XML文件的不同途径,以及使用DOM、SAX和PULL三种解析方式的具体实现。 ... [详细]
  • 本文探讨如何使用 PHP 进行字符串处理,特别是如何检测一个字符串是否存在于另一个字符串中,并确定其具体位置。通过实例代码展示,帮助读者掌握这一常用功能。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • 详细指南:使用IntelliJ IDEA构建多模块Maven项目
    本文在前两篇文章的基础上,进一步指导读者如何在IntelliJ IDEA中创建和配置多模块Maven项目。通过详细的步骤说明,帮助读者掌握项目模块化管理的方法。 ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • 探索Squid反向代理中的远程代码执行漏洞
    本文深入探讨了在网站渗透测试过程中发现的Squid反向代理系统中存在的远程代码执行漏洞,旨在帮助网站管理者和开发者了解此类漏洞的危害及防范措施。 ... [详细]
  • Android中实现复合旋转动画效果
    本文将探讨如何在Android应用中实现动态且吸引人的旋转动画。通过结合多种动画类型,如透明度变化、旋转、缩放和位移,可以创造出更为复杂的视觉效果。我们将从XML布局和Java代码两个方面进行详细介绍。 ... [详细]
  • Android商城应用开发指南(第二部分):创建启动欢迎页
    大多数商城应用程序在启动时会显示一个欢迎页面,以提升用户体验。本文将指导您如何实现一个基本的欢迎页,该页面会在用户打开应用后短暂展示,随后自动跳转至主界面。 ... [详细]
author-avatar
许桂欢_173
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有