`
20386053
  • 浏览: 461680 次
文章分类
社区版块
存档分类
最新评论

Android 中网络编程之HTTP通信

 
阅读更多

Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序。以下是本人在学习中的总结与归纳。
1. HttpURLConnection接口
首先需要明确的是,Http通信中的POST和GET请求方式的不同。GET可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器。而POST方法的参数是放在Http请求中。因此,在编程之前,应当首先明确使用的请求方法,然后再根据所使用的方式选择相应的编程方式。
HttpURLConnection是继承于URLConnection类,二者都是抽象类。其对象主要通过URL的openConnection方法获得。创建方法如下代码所示:

  1. URL url = new URL("http://www.51cto.com/index.jsp?par=123456");
  2. HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();

通过以下方法可以对请求的属性进行一些设置,如下所示:

  1. //设置输入和输出流
  2. urlConn.setDoOutput(true);
  3. urlConn.setDoInput(true);
  4. //设置请求方式为POST
  5. urlConn.setRequestMethod("POST");
  6. //POST请求不能使用缓存
  7. urlConn.setUseCaches(false);
  8. //关闭连接
  9. urlConn.disConnection();



HttpURLConnection默认使用GET方式,例如下面代码所示:

  1. //使用HttpURLConnection打开连接
  2. HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
  3. //得到读取的内容(流)
  4. InputStreamReader in = new InputStreamReader(urlConn.getInputStream());
  5. // 为输出创建BufferedReader
  6. BufferedReader buffer = new BufferedReader(in);
  7. String inputLine = null;
  8. //使用循环来读取获得的数据
  9. while (((inputLine = buffer.readLine()) != null))
  10. {
  11. //我们在每一行后面加上一个"/n"来换行
  12. resultData += inputLine + "/n";
  13. }
  14. //关闭InputStreamReader
  15. in.close();
  16. //关闭http连接
  17. urlConn.disconnect();



如果需要使用POST方式,则需要setRequestMethod设置。代码如下:

  1. String httpUrl = "http://192.168.1.110:8080/httpget.jsp";
  2. //获得的数据
  3. String resultData = "";
  4. URL url = null;
  5. try
  6. {
  7. //构造一个URL对象
  8. url = new URL(httpUrl);
  9. }
  10. catch (MalformedURLException e)
  11. {
  12. Log.e(DEBUG_TAG, "MalformedURLException");
  13. }
  14. if (url != null)
  15. {
  16. try
  17. {
  18. // 使用HttpURLConnection打开连接
  19. HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
  20. //因为这个是post请求,设立需要设置为true
  21. urlConn.setDoOutput(true);
  22. urlConn.setDoInput(true);
  23. // 设置以POST方式
  24. urlConn.setRequestMethod("POST");
  25. // Post 请求不能使用缓存
  26. urlConn.setUseCaches(false);
  27. urlConn.setInstanceFollowRedirects(true);
  28. // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
  29. urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
  30. // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
  31. // 要注意的是connection.getOutputStream会隐含的进行connect。
  32. urlConn.connect();
  33. //DataOutputStream流
  34. DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());
  35. //要上传的参数
  36. String content = "par=" + URLEncoder.encode("ABCDEFG", "gb2312");
  37. //将要上传的内容写入流中
  38. out.writeBytes(content);
  39. //刷新、关闭
  40. out.flush();
  41. out.close();



2. HttpClient接口
使用Apache提供的HttpClient接口同样可以进行HTTP操作。
对于GET和POST请求方法的操作有所不同。GET方法的操作代码示例如下:

  1. // http地址
  2. String httpUrl = "http://192.168.1.110:8080/httpget.jsp?par=HttpClient_android_Get";
  3. //HttpGet连接对象
  4. HttpGet httpRequest = new HttpGet(httpUrl);
  5. //取得HttpClient对象
  6. HttpClient httpclient = new DefaultHttpClient();
  7. //请求HttpClient,取得HttpResponse
  8. HttpResponse httpResponse = httpclient.execute(httpRequest);
  9. //请求成功
  10. if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
  11. {
  12. //取得返回的字符串
  13. String strResult = EntityUtils.toString(httpResponse.getEntity());
  14. mTextView.setText(strResult);
  15. }
  16. else
  17. {
  18. mTextView.setText("请求错误!");
  19. }
  20. }



使用POST方法进行参数传递时,需要使用NameValuePair来保存要传递的参数。,另外,还需要设置所使用的字符集。代码如下所示:

  1. // http地址
  2. String httpUrl = "http://192.168.1.110:8080/httpget.jsp";
  3. //HttpPost连接对象
  4. HttpPost httpRequest = new HttpPost(httpUrl);
  5. //使用NameValuePair来保存要传递的Post参数
  6. List<NameValuePair> params = new ArrayList<NameValuePair>();
  7. //添加要传递的参数
  8. params.add(new BasicNameValuePair("par", "HttpClient_android_Post"));
  9. //设置字符集
  10. HttpEntity httpentity = new UrlEncodedFormEntity(params, "gb2312");
  11. //请求httpRequest
  12. httpRequest.setEntity(httpentity);
  13. //取得默认的HttpClient
  14. HttpClient httpclient = new DefaultHttpClient();
  15. //取得HttpResponse
  16. HttpResponse httpResponse = httpclient.execute(httpRequest);
  17. //HttpStatus.SC_OK表示连接成功
  18. if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
  19. {
  20. //取得返回的字符串
  21. String strResult = EntityUtils.toString(httpResponse.getEntity());
  22. mTextView.setText(strResult);
  23. }
  24. else
  25. {
  26. mTextView.setText("请求错误!");
  27. }
  28. }

HttpClient实际上是对Java提供方法的一些封装,在HttpURLConnection中的输入输出流操作,在这个接口中被统一封装成了HttpPost(HttpGet)和HttpResponse,这样,就减少了操作的繁琐性。

另外,在使用POST方式进行传输时,需要进行字符编码。

原作地址:http://52android.blog.51cto.com/2554429/496621

分享到:
评论

相关推荐

    Android网络编程之Http通信

    Android网络编程是移动应用开发中的一个重要组成部分,而Http通信则是网络编程中最常用的协议之一。在Android平台上,我们通常会使用HttpURLConnection或者第三方库如Apache HttpClient和OkHttp等进行Http通信。 1....

    Android网络编程基于socket的通信

    Android中,直接采用Socket通信应该是我们遇到的最低级的网络运用。

    android 网络编程简介

    从描述中可以得知,Android网络编程涉及的知识点包括但不限于网络协议理解、网络编程接口的使用、以太网技术、硬件接口技术以及嵌入式系统设计等。 8. 网络编程中的Linux优化技术 文章提到了Linux优化技术,并在...

    Android系统应用开发 实验五 网络通信 实验报告

    在Android系统应用开发中,网络通信是至关重要的一个环节,特别是在构建交互性强的应用时。本实验旨在让学生深入了解Android网络通信技术,并通过实际操作掌握不同类型的网络通信方式,包括利用WebView实现浏览器...

    android网络编程基础

    在Android平台上进行网络...总结起来,Android网络编程是通过Java网络库与远程服务器进行通信的过程,涉及请求构建、数据交换和错误处理等多个环节。了解并掌握这些基础知识对于开发功能丰富的Android应用至关重要。

    android4.0网络编程详解——源码

    在Android 4.0(Ice Cream Sandwich)系统中,网络编程是实现应用程序与远程服务器交互的重要部分。本章将深入探讨如何在Android平台上进行网络操作,包括基础的HTTP请求、数据传输、网络状态监听以及更高级的Socket...

    Android 网络编程入门之图片下载

    在Android开发中,网络编程是一项基础且重要的技能,特别是在处理数据获取、文件传输等方面。本教程将引导初学者进入Android网络编程的世界,专注于图片下载这一实际应用。我们将使用Tomcat服务器来存储和提供图片,...

    Android4.0网络编程详解.pdf

    - Android 4.0中,网络编程的一个重要进步是引入了更加高级的抽象层,比如使用HTTP客户端API,这使得开发者不必深入了解底层的Socket连接细节,就能实现HTTP通信。 2. 使用URL和URLConnection: - Java的URL类和...

    Android 4.0 网络编程详解 王家林.pdf

    总结来说,“Android 4.0 网络编程详解”这篇文档可能详细介绍了Android 4.0版本的网络API使用方法、网络通信的最佳实践、网络编程中常见的问题和解决方案等。献给所有对技术抱有好奇心和热情的软件工程师们,意味着...

    Android网络编程 非常适合入门

    Android网路编程代码 设计客户端和服务器端通信 适合初学者学习 当然其中包括很多其他知识点 例如基于handler的主副线程通信机制 多线程应用等 另外 对于Android入门的学习者 也是一手极好的学习资料 下载即可运行 ...

    Android网络编程-聊天室开发

    通过以上介绍,我们可以了解到Android聊天室项目是如何通过Socket网络编程实现客户端与服务器之间的通信的。服务器端作为消息的中转站,负责接收客户端发送的消息并将这些消息广播给所有在线的客户端。客户端则通过...

    android网络编程.pdf

    以上介绍了Android网络编程的基本知识点,包括网络状态检测、Wi-Fi网络访问、套接字通信以及HTTP协议的使用。这些技术是构建具有网络功能的Android应用的基础,掌握它们可以帮助开发者更好地实现复杂的功能需求。

    Android网络编程Demo

    这个“Android网络编程Demo”旨在提供一个基础的示例,帮助开发者理解和实践如何在Android应用中实现网络通信。以下是相关知识点的详细说明: 1. **Android网络权限**: 在AndroidManifest.xml文件中,需要声明`...

    老罗Android视频开发教程 android之http协议编程代码

    在Android应用开发中,HTTP协议编程是至关重要的一个环节,特别是在进行网络通信时。老罗的这个Android视频教程深入浅出地讲解了如何在Android环境中使用HTTP协议进行数据交互,对于初学者和有一定经验的开发者来说...

    Android高级网络编程技术实践

    在Android平台中进行高级网络编程时,涉及到的核心知识点主要包括网络通信机制、TCP与UDP协议、多线程处理以及数据缓冲等技术。下面将详细介绍这些知识点,并解析如何在Android中实现基于Socket的网络通信。 ### ...

    网络编程与3G通信课件

    网络编程与3G通信是信息技术领域中的两个重要概念,它们在现代互联网和移动通信系统中起着关键作用。网络编程是指编写程序来实现计算机之间的通信,包括数据的发送、接收和处理,它是互联网应用程序的基础。而3G通信...

    Android 4.0网络编程详解

    《Android 4.0网络编程详解》一书深入探讨了在Android 4.0系统上进行网络编程的技术细节与实践方法。此版本的Android系统,即Ice Cream Sandwich(冰淇淋三明治),带来了许多网络功能上的改进和新特性,使得开发者...

Global site tag (gtag.js) - Google Analytics