安卓开发软件:AndroidStudio

服务器软件:Myeclipse+Tomcat

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

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

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

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

  1. get方式
    1. 设置URL
    2. 打开连接
    3. 设置请求方法为get
    4. 设置连接超时时间
    5. 设置读取超时时间
    6. 把当前的request发送到服务器端
    7. 等待服务器的响应(此处会阻塞)
    8. 获得响应码(并在响应码中做相应的操作),因为安卓子线程内不允许做UI更新的操作,所以需要转到主线程来做(通过安卓中的handler来将信息传递到主线程)
      1. public void getPic(View v){
      2. new Thread(new Runnable() {
      3. @Override
      4. public void run() {
      5. try {
      6. //首先要支出服务器的地址
      7. URL url=new URL("http://192.168.2.1/day10_NetworkServer/brushli.jpg");
      8. //通过http连接
      9. HttpURLConnection httpurlConnection = (HttpURLConnection) url.openConnection();
      10. //设置请求方式,并设置等待响应时间
      11. httpurlConnection.setRequestMethod("GET");
      12. httpurlConnection.setConnectTimeout(5000);
      13. //把当前的request发送到服务器(安卓不允许在主线程内做耗时操作,如连接服务器)
      14. httpurlConnection.connect();
      15. //发送完连接后等待操作,这个是阻塞式方法,
      16. int responseCode = httpurlConnection.getResponseCode();
      17.  
      18. //根据得到的响应代码和response的信息作出相应的操作
      19. if(responseCode==200){
      20. //从服务器读取正确与否的信息
      21. InputStream is=httpurlConnection.getInputStream();
      22. File file=new File("/data/data/com.rgd.day10_network_3/files");
      23. file.mkdir();
      24. FileOutputStream fos=new FileOutputStream(new File("/data/data/com.rgd.day10_network_3/files/brushli.jpg"));
      25. byte[] buffer=new byte[1024];
      26. int read;
      27. while ((read =is.read(buffer))!=-1){
      28. fos.write(buffer,0,read);
      29. }
      30. //由于子线程不允许做UI更新操作,与要通过Handler进行和主线程的通信操作
      31.  
      32. Message msg=new Message();
      33. msg.what=1;
      34. handler.sendMessage(msg);
      35. fos.close();
      36. is.close();
      37.  
      38. }
      39. } catch (MalformedURLException e) {
      40. e.printStackTrace();
      41. } catch (IOException e) {
      42. e.printStackTrace();
      43. }
      44.  
      45. }
      46. }).start();
      47.  
      48. }
      49. Handler handler=new Handler(){
      50. @Override
      51. public void handleMessage(Message msg) {
      52. super.handleMessage(msg);
      53. switch(msg.what){
      54. case 1:
      55. Toast.makeText(MainActivity.this, "保存图片成功", Toast.LENGTH_LONG).show();
      56. break;
      57. case 2:
      58. Toast.makeText(MainActivity.this,"保存MP3成功",Toast.LENGTH_LONG).show();
      59. break;
      60. case 3:
      61. Toast.makeText(MainActivity.this,"保存视频成功",Toast.LENGTH_SHORT).show();
      62. default:
      63. break;
      64. }
      65. }
      66. };

        

    2.post方式  

    • 操作跟get差不多,除了post传递信息是通过正文传递的,而get是放在连接中的
      1. new Thread(new Runnable() {
      2. @Override
      3. public void run() {
      4. try {
      5. //首先要支出服务器的地址
      6. URL url=new URL("http://192.168.106.1/day10_NetworkServer/servlet/loginInfo");
      7. //通过http连接
      8. HttpURLConnection httpurlConnection = (HttpURLConnection) url.openConnection();
      9. //设置请求方式,并设置等待响应时间
      10. httpurlConnection.setRequestMethod("POST");
      11. httpurlConnection.setConnectTimeout(5000);
      12.  
      13. String data="username="+username+"&password="+password+"&email="+email+"&phonenumber="+phonenumber;
      14. OutputStream outputStream = httpurlConnection.getOutputStream();
      15. outputStream.write(data.getBytes());
      16. //把当前的request发送到服务器(安卓不允许在主线程内做耗时操作,如连接服务器)
      17. httpurlConnection.connect();
      18. //发送完连接后等待操作,这个是阻塞式方法,
      19. int responseCode = httpurlConnection.getResponseCode();
      20.  
      21. //根据得到的响应代码和response的信息作出相应的操作
      22. if(responseCode==200){
      23. //从服务器读取正确与否的信息
      24. InputStream is=httpurlConnection.getInputStream();
      25. byte[] buffer=new byte[1024];
      26. int read = is.read(buffer);
      27. String result=new String(buffer,0,read);
      28. //由于子线程不允许做UI更新操作,与要通过Handler进行和主线程的通信操作
      29. Message msg=new Message();
      30. msg.what=1;
      31. handler.sendMessage(msg);
      32.  
      33. }else{
      34. Message msg=new Message();
      35. msg.what=-1;
      36. handler.sendMessage(msg);
      37. }
      38. } catch (MalformedURLException e) {
      39. e.printStackTrace();
      40. } catch (IOException e) {
      41. e.printStackTrace();
      42. }
      43.  
      44. }
      45. }).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. 安卓SeekBar

    public class Speak extends Fragment implements OnSeekBarChangeListener { private SeekBar bar1; priva ...

  2. linux命令之tail

    tail用于输出文件末尾部分.一个比较有用的功能是tail + grep实现类似于安卓开发时调试使用的logcat,具体操作是: 一般我是用SecureCRT连接linux,然后使用SecureCRT ...

  3. NEST与JSON语法对照 一 match与multi_match

    { "query": { "bool": { "must": [ { "multi_match": { "qu ...

  4. FFMPEG在嵌入式硬件上应用之 —— 基本环境搭建及编译

    前段时间在翻看电脑里面资料时,发现了以前做的在嵌入式硬件上面运行以ffmepg为基础,以嵌入式硬件解码的多媒体播放工作,发现都快忘记完了.今日得闲整理温习了一下ffmpeg在嵌入式上的运用,这里给大家 ...

  5. 使用好压(HaoZip)软件打包EverEdit制作安装程序

    最近使用EverEdit,使用原始的安装程序安装后,需要重新安装插件,对配置文件进行了修改,定制了工具栏.将安装后的程序目录进行打包,制作新的安装包,便于携带. 以下为打包制作过程: 打包原料:Eve ...

  6. 【转载、推荐】不要自称是程序员,我十多年的 IT 职场总结

    注评:一气读完后,有些和我的观点类似.这篇文章显然是外国老写的,但是不妨碍我们的跨国交流. 如果我可以给每个工程教育增加一门课,它不会涉及编译器.门电路或是时间复杂度,而是一门介绍行业现实的入门课,因 ...

  7. Linux提权(2)-高级版

    当你在攻击受害者的电脑时即使你拥有了一个shell,依然可能会有一些拒绝执行指令的限制.为了获得目标主机的完整控制权限,你需要在未授权的地方绕过权限控制.这些权限可以删除文件,浏览私人信息,或者安装并 ...

  8. One EEG preprocessing pipeline - EEG-fMRI paradigm

    The preprocessing pipeline of EEG data from EEG-fMRI paradigm differs from that of regular EEG data, ...

  9. 【C#】【Thread】SpinWait

    System.Threading.SpinWait 是一个轻量同步类型,可以在低级别方案中使用它来避免内核事件所需的高开销的上下文切换和内核转换. 在多核计算机上,当预计资源不会保留很长一段时间时,如 ...

  10. [转载]jQuery中wrap、wrapAll和wrapInner用法以及区别

    原文地址:jQuery中wrap.wrapAll和wrapInner用法以及区别作者:伊少君 原文: <ul>   <li title='苹果'>苹果</li>   ...