android网络通信

1. HttpURLConnection接口

首先需要明确的是,Http通信中的POST和GET请求方式的不同。GET可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器。而POST方法的参数是放在Http请求中。因此,在编程之前,应当首先明确使用的请求方法,然后再根据所使用的方式选择相应的编程方式。

HttpURLConnection是继承于URLConnection类,二者都是抽象类。其对象主要通过URL的openConnection方法获得。创建方法如下代码所示:

1.URL url = new URL("http://www.51cto.com/");

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();

10.

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

1.String httpUrl="http://192.168.1.110:8080/httpget.jsp?par=abcdefg‘‘;

2.URL url=new URL(httpUrl);

3.//使用HttpURLConnection打开连接

4.                HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

5.                //得到读取的内容(流)

6.                InputStreamReader in = new InputStreamReader(urlConn.getInputStream());

7.                // 为输出创建BufferedReader

8.                BufferedReader buffer = new BufferedReader(in);

9.                String inputLine = null;

10.                //使用循环来读取获得的数据

11.                while (((inputLine = buffer.readLine()) != null))

12.                {

13.                    //我们在每一行后面加上一个"\n"来换行

14.                    resultData += inputLine + "\n";

15.                }

16.                //关闭InputStreamReader

17.                in.close();

18.                //关闭http连接

19.                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 params = new ArrayList();

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方式进行传输时,需要进行字符编码。

时间: 2024-08-29 18:45:07

android网络通信的相关文章

Android网络通信Volley框架源码浅析(三)

尊重原创 http://write.blog.csdn.net/postedit/26002961 通过前面浅析(一)和浅析(二)的分析,相信大家对于Volley有了初步的认识,但是如果想更深入的理解,还需要靠大家多多看源码. 这篇文章中我们主要来研究一下使用Volley框架请求大量图片的原理,在Android的应用中,通过http请求获取的数据主要有三类: 1.json 2.xml 3.Image 其中json和xml的获取其实原理很简单,使用Volley获取感觉有点大财小用了,了解Volle

【转】Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Go

Android网络通信的基本实现

似乎很久没有写博客了,今天看了无意间看了下半年前写的代码,设计似乎很有局限性,但基本的通信也算是实现了. 不知道以后看到现在写的代码会不会也会有这样的想法呢? 进入正题,android网络通信的基本实现的有两种方式,一种是通过HttpClient来实现,一种是通过HttpURLConnection来实现. 直接上代码: 首先是一个抽象的http类 /** * 抽象的Http * @author Jenly * @date 2014-8-7 * */ public abstract class A

Android网络通信库Volley简介

1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.这是Volley名称的由来: a burst or emission of many things or a large amount at

Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在 这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于 AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的

[转]Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Go

Android网络通信两种方法

android的网络编程分为2种:基于socket的,和基于http协议的. Http通信 以xml或者json为载体,相互通信数据. JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包. Socket通信 Socket与Http不同的是两个的协议不同,socket是面向TCP/UDP协议的,http通信时面

Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)

使用Http的Get方式读取网络数据,使用Get方式与网络通信是最常见的Http通信,建立链接之后就可以通过输入流读取网络数据. 详见:Android(java)学习笔记209:采用get请求提交数据到服务器(qq登录案例)

Android 网络通信基类的实现

为了方便我们与服务器的通信,我们需要实现一个网络通信基类. 实现代码如下: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.ne

Android 网络通信框架Volley的解析

在2013年Google I/O大会上,Android开发团队公布了一个新的网络通信框架:Volley.它适合处理通信频繁的网络操作,但对于每一次通信的数据量则有较为苛刻的限制.本文将介绍该通信框架的用法(包括使用现成和自定义的Request),并从源码的角度探究其工作机制. 目前,Android系统中用于实现HTTP通信的方式主要有HttpURLConnection和HttpClient两个类[1],而封装了它们的框架主要有AsyncHttpClient和Universal-Image-Loa