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

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

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

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

注意需要的权限:

<uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission androID:name="androID.permission.MOUNT_UNMOUNT_fileSYstemS"/>

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

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

编程步骤如下:

1.先写布局文件:

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical"> <button  androID:layout_wIDth="wrap_content"  androID:layout_height="wrap_content"  androID:onClick="click"  androID:text="加载图片"   /> <ImageVIEw  androID:layout_wIDth="wrap_content"  androID:layout_height="wrap_content"  androID:layout_centerInParent="true"  androID:ID="@+ID/iv"/> <button  androID:layout_wIDth="wrap_content"  androID:layout_height="wrap_content"  androID:onClick="click2"  androID:text="加载文本"   /> <TextVIEw  androID:layout_wIDth="wrap_content"  androID:layout_height="wrap_content"  androID:ID="@+ID/tv"/></linearLayout>

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,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,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,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,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程序设计有所帮助。

您可能感兴趣的文章:Android通过HttpURLConnection和HttpClient接口实现网络编程Android中HttpURLConnection与HttpClient的使用与封装Android网络技术HttpURLConnection详解@L_419_13@ 总结

以上是内存溢出为你收集整理的Android开发使用HttpURLConnection进行网络编程详解【附源码下载】全部内容,希望文章能够帮你解决Android开发使用HttpURLConnection进行网络编程详解【附源码下载】所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1143024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存