安卓开发软件:AndroidStudio

服务器软件:Myeclipse+Tomcat

首先无论是哪种方式,安卓手机软件要想联网,必须要申请联网权限(android.permission.INTERNET)。

安卓主线程不允许做耗时操作(联网操作就是一种耗时操作),所以下面的的网络操作都是通过内部匿名类另起的一个线程操作的。

一,第一种方式:使用HttpURLConnection进行联网操作

  这个方法需要我们手动构建一个http请求包,发送到指定的服务器

  1. get方式
    1. 设置URL
    2. 打开连接
    3. 设置请求方法为get
    4. 设置连接超时时间
    5. 设置读取超时时间
    6. 把当前的request发送到服务器端
    7. 等待服务器的响应(此处会阻塞)
    8. 获得响应码(并在响应码中做相应的操作),因为安卓子线程内不允许做UI更新的操作,所以需要转到主线程来做(通过安卓中的handler来将信息传递到主线程)
      public void getPic(View v){
      new Thread(new Runnable() {
      @Override
      public void run() {
      try {
      //首先要支出服务器的地址
      URL url=new URL("http://192.168.2.1/day10_NetworkServer/brushli.jpg");
      //通过http连接
      HttpURLConnection httpurlConnection = (HttpURLConnection) url.openConnection();
      //设置请求方式,并设置等待响应时间
      httpurlConnection.setRequestMethod("GET");
      httpurlConnection.setConnectTimeout(5000);
      //把当前的request发送到服务器(安卓不允许在主线程内做耗时操作,如连接服务器)
      httpurlConnection.connect();
      //发送完连接后等待操作,这个是阻塞式方法,
      int responseCode = httpurlConnection.getResponseCode(); //根据得到的响应代码和response的信息作出相应的操作
      if(responseCode==200){
      //从服务器读取正确与否的信息
      InputStream is=httpurlConnection.getInputStream();
      File file=new File("/data/data/com.rgd.day10_network_3/files");
      file.mkdir();
      FileOutputStream fos=new FileOutputStream(new File("/data/data/com.rgd.day10_network_3/files/brushli.jpg"));
      byte[] buffer=new byte[1024];
      int read;
      while ((read =is.read(buffer))!=-1){
      fos.write(buffer,0,read);
      }
      //由于子线程不允许做UI更新操作,与要通过Handler进行和主线程的通信操作 Message msg=new Message();
      msg.what=1;
      handler.sendMessage(msg);
      fos.close();
      is.close(); }
      } catch (MalformedURLException e) {
      e.printStackTrace();
      } catch (IOException e) {
      e.printStackTrace();
      } }
      }).start(); }
      Handler handler=new Handler(){
      @Override
      public void handleMessage(Message msg) {
      super.handleMessage(msg);
      switch(msg.what){
      case 1:
      Toast.makeText(MainActivity.this, "保存图片成功", Toast.LENGTH_LONG).show();
      break;
      case 2:
      Toast.makeText(MainActivity.this,"保存MP3成功",Toast.LENGTH_LONG).show();
      break;
      case 3:
      Toast.makeText(MainActivity.this,"保存视频成功",Toast.LENGTH_SHORT).show();
      default:
      break;
      }
      }
      };

        

    2.post方式  

    • 操作跟get差不多,除了post传递信息是通过正文传递的,而get是放在连接中的
    • new Thread(new Runnable() {
      @Override
      public void run() {
      try {
      //首先要支出服务器的地址
      URL url=new URL("http://192.168.106.1/day10_NetworkServer/servlet/loginInfo");
      //通过http连接
      HttpURLConnection httpurlConnection = (HttpURLConnection) url.openConnection();
      //设置请求方式,并设置等待响应时间
      httpurlConnection.setRequestMethod("POST");
      httpurlConnection.setConnectTimeout(5000); String data="username="+username+"&password="+password+"&email="+email+"&phonenumber="+phonenumber;
      OutputStream outputStream = httpurlConnection.getOutputStream();
      outputStream.write(data.getBytes());
      //把当前的request发送到服务器(安卓不允许在主线程内做耗时操作,如连接服务器)
      httpurlConnection.connect();
      //发送完连接后等待操作,这个是阻塞式方法,
      int responseCode = httpurlConnection.getResponseCode(); //根据得到的响应代码和response的信息作出相应的操作
      if(responseCode==200){
      //从服务器读取正确与否的信息
      InputStream is=httpurlConnection.getInputStream();
      byte[] buffer=new byte[1024];
      int read = is.read(buffer);
      String result=new String(buffer,0,read);
      //由于子线程不允许做UI更新操作,与要通过Handler进行和主线程的通信操作
      Message msg=new Message();
      msg.what=1;
      handler.sendMessage(msg); }else{
      Message msg=new Message();
      msg.what=-1;
      handler.sendMessage(msg);
      }
      } catch (MalformedURLException e) {
      e.printStackTrace();
      } catch (IOException e) {
      e.printStackTrace();
      } }
      }).start();

     3.通过  

      

Android网络操作的几种方法的更多相关文章

  1. Android网络连接的两种方法:apache client和httpurlconnection的比较

    另见http://blog.csdn.net/mingli198611/article/details/8766585 在官方blog中,android工程师谈到了如何去选择apache client ...

  2. Android 抗锯齿的两种方法

    Android 抗锯齿的两种方法 (其一:paint.setAntiAlias(ture);paint.setBitmapFilter(true))   在Android中,目前,我知道有两种出现锯齿 ...

  3. android emulator启动的两种方法详解

    android emulator启动的两种方法详解    转https://blog.csdn.net/TTS_Kevin/article/details/7452237 对于android学习者,模 ...

  4. PHP实现链式操作的三种方法详解

    这篇文章主要介绍了PHP实现链式操作的三种方法,结合实例形式分析了php链式操作的相关实现技巧与使用注意事项,需要的朋友可以参考下 本文实例讲述了PHP实现链式操作的三种方法.分享给大家供大家参考,具 ...

  5. android 实现分享功能两种方法

    当我想做一个智能的记事本的时候,我就在尝试自己写一组分享功能.后来才知道,原来每个社交软件中都有自己的分享接口. 这就大大减少了我们的代码量了. 第一种方法:特点--简单 package com.ex ...

  6. android——网络操作(一)连接网络

    连接网络 一,包含许可 <uses-permissionandroid:name="android.permission.INTERNET"/> <uses-pe ...

  7. Android更新UI的几种方法

    在Android开发过程中,常需要更新界面的UI.比如网络请求操作.一些耗时操作都不能放在UI线程中运行的,需要放在子线程,而子线程又不能更新UI界面,这是我们需要引入一个Handler,消息处理机制 ...

  8. Android数据存储的五种方法汇总

    本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 ...

  9. Android数据存储的5种方法

    --使用SharedPreferences存储数据 --文件存储数据 --SQLite数据库存储数据 --使用ContentProvider存储数据 --网络存储数据 Preference,File, ...

随机推荐

  1. ELF Format 笔记(十五)—— 符号哈希表

    ilocker:关注 Android 安全(新手) QQ: 2597294287 符号哈希表用于支援符号表的访问,能够提高符号搜索速度. 下表用于解释该哈希表的组织,但该格式并不属于 ELF 规范. ...

  2. linux mail利用外部邮箱地址发邮件

    mail命令发送邮件需要sendmail或postfix服务 三种常用格式发信 mail -s "标题" xxx@xxx.xxx #第一种方法,你可以把当前shell当成编辑器来用 ...

  3. app端微信支付(二) - 生成预付单

    ​前一篇文章的时序图中说了,app端调用微信支付必须先由后台调用微信后台生成预付单,再构建参数给手机端,而数据的构建要以xml形式,那么看看代码具体实现吧,代码已经精简过了,自己的业务已经除去,精简的 ...

  4. pycharm的使用破解和Anaconda的使用

    1.pycharm的破解: 版本: pycharm 2016.2.3 链接: 下载专业版本   下面是这个版本的注册码: 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTcz ...

  5. 鼠标/手指相对于元素的坐标(px转百分比)

    鼠标/手指相对于元素的坐标:鼠标或手指当前的位置 - 元素距离文档的位置 px转百分比:px / 文档尺寸 * 100 获取手指触摸在屏幕中相对于元素的坐标(px转百分比): $('#div').on ...

  6. java多线程系类:JUC线程池:01之线程池架构

    概要 前面分别介绍了"Java多线程基础"."JUC原子类"和"JUC锁".本章介绍JUC的最后一部分的内容--线程池.内容包括:线程池架构 ...

  7. Linux进程管理子系统分析【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51298732 Linux进程管理: 进程与程序: 程序:存放在磁盘上的一系列代码 ...

  8. Win10激活KMS

    Windows 10是目前微软主推的Windows系统,Win10 相对之前的Win7/8是吸取二者之长,发展而来! 目前新装的Windows10默认没有激活的 芝麻开们:http://pan.bai ...

  9. 传说中的inside番——“黄金圣衣”篇

    10月21日,在今天的课堂上拿到了我们软工实践课程的战斗圣衣,传说穿上它就能够在编码意志上+100,有着爆种.不死不休战斗等传奇属性——build to win.当然,这是我的追求与梦想.现在的我,还 ...

  10. .Net Core Linux centos7行—.net core json 配置文件

    .net core 对配置系统做出了大幅度更新,不在局限于之前的*.xml配置方式.现在支持json,xml,ini,in memory,环境变量等等.毫无疑问的是,现在的json配置文件是.net ...