Android入门笔记 - 网络通信 - HttpClient

今天我们来学习怎么使用 Apache 为android提供的网络通信接口,如果要使用http协议,就需要使用 HttpClient。

使用HttpClient要比使用 HttpURLConnection更简单一些,我们来看看代码:

1. 使用get方法获取网络图片:

调用:

		mBtnGet.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Bitmap picture = getNetPicture("http://192.168.1.19:8080/Web1/img.jpg");
				if (null != picture) {
					mImg.setImageBitmap(picture);
				}
			}
		});

方法:

	private Bitmap getNetPicture(String imgUrl) {
		Bitmap img = null;
		HttpClient client = null;
		HttpGet request = null;
		HttpResponse response = null;

		try {
			request = new HttpGet(imgUrl);
			client = new DefaultHttpClient();
			client.getParams().setParameter(
					CoreConnectionPNames.CONNECTION_TIMEOUT, 1000 * 5); // 链接超时
			client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,1000 * 5); // 读取超时
			response = client.execute(request);
			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				InputStream is = response.getEntity().getContent();
                                //如果是返回得字符串,可以直接用 EntityUtils来处理
                                //EntityUtils.toString(response.getEntity());
				img = BitmapFactory.decodeStream(is);
			} else {
				showToast("get获取网络图片失败!");
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
			showToast(e.getMessage());
		} catch (IOException e) {
			e.printStackTrace();
			showToast(e.getMessage());
		}
		return img;
	}

使用get方法比较简单,如果要添加参数可以直接在url后面添加 ?par=???&par2=??? 来设置参数。这里我们请求本地服务器上的一张图片,没有设置参数。

使用步骤:

(1)得到一个 HttpClient 对象 ,使用 HttpClient client = new DefaultHttpClient() ; 获得

(2)设置超时参数(最好是设置,不然如果没有访到会等很久)

(3)new 一个 HttpGet 对象,并将url附给它。 HttpGet request = new HttpGet(url);

(4)获得响应对象: HttpResponse response = client.excute(request);

(5)判断 response的状态码是否成功,如果成功就可以进一步获得流对象。 response.getEntiry().getContent() 来获取流对象,拿到流之后,就可以想干什么就干什么了。

2. 使用post方法获取网络html文件:

调用:

		mBtnPost.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				String content = getNetHtml("http://192.168.1.19:8080/Web1/login3.jsp");
				mTv.setText(content!=null ? content:"获取html失败!");
			}
		});

方法:

	private String getNetHtml(String url){
		HttpClient client = null;
		HttpPost request = null;
		HttpResponse response = null;
		String data = null;

		client = new DefaultHttpClient();
		request = new HttpPost(url);
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		params.add(new BasicNameValuePair("par", "Httpclinet_android_post"));
		try {
			HttpEntity entity = new UrlEncodedFormEntity(params, "gb2312");
			request.setEntity(entity);
			client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000*5);
			client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 1000*5);
			response = client.execute(request);
			if(HttpStatus.SC_OK == response.getStatusLine().getStatusCode()){
				data = EntityUtils.toString(response.getEntity());
			}
			else{

			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
			showToast(""+e.getMessage());
		} catch (IOException e) {
			e.printStackTrace();
			showToast(""+e.getMessage());
		}
		return data;
	}

使用步骤:

相比于get方法,post方法总是要先设置一些参数,所以要复杂一点,不过也很简单的啦。

(1)获得HttpClient对象,设置超时。。。

(2)获得 HttpPost对象,并将 url传入。

(3)设置要传递的参数。post方法中使用到了 NameValuePair 来给Post请求设置参数。这是设置一个参数 par, 值为: Httpclient_android_post

		List<NameValuePair> params = new ArrayList<NameValuePair>();
		params.add(new BasicNameValuePair("par", "Httpclinet_android_post"));
<pre name="code" class="java">		HttpEntity entity = new UrlEncodedFormEntity(params, "gb2312");
<pre name="code" class="java">		request.setEntity(entity);


(4)接下来的步骤就和get一样了。

运行效果:

代码地址:

http://download.csdn.net/detail/u013647382/8267145

时间: 2024-10-18 01:11:22

Android入门笔记 - 网络通信 - HttpClient的相关文章

Android入门笔记 - 网络通信 - Socket

今天来学习一下android中通信方式中的socket.上两次我们分别使用了HttpURLConnection , 和 HttpClient来实现通信,他们都是在使用HTTP协议,Socket被称为套接字,使用的协议有TCP和UDP,TCP和UDP的区别在于TCP是可靠稳定的,自带容错处理等优点,所以效率要低一点.然后UDP就不那么稳定了,当使用UDP发送数据的时候,每次send,那么socket只管send,不会管send之后对方是否收到,是否顺序正确,所以UDP被称为不稳定的传输,但是其效率

Android入门笔记 - 网络通信 - HttpURLConnection

Android中要与远程服务器通信有很多方法,今天我们来介绍使用http协议从远程服务器上获取数据. 在android中可以使用 一下三种接口和服务器进行http通信: 1. java标准接口:java.net.*; 2. apathe接口: org. apache. http. *; 3. android接口: android.net.*; 今天我们介绍 java的标准接口,接下来我们将介绍: 1. 使用get方法获取网络html文件 2. 使用post方法获取网络html文件 3. 使用ge

Android入门笔记1

按钮事件 ? 演示编辑框.文本显示.按钮事件 布局: ? 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="m

Android入门笔记2——获取传感器列表

? UI界面: ? Xml: <RelativeLayout 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" an

Android学习笔记之HttpClient实现Http请求....

PS:最近光忙着考试了....破组成原理都看吐了....搞的什么也不想干...写篇博客爽爽吧....貌似明天就考试了...sad... 学习笔记: 1.如何实现Http请求来实现通信.... 2.解决Android 2.3 版本以后无法使用Http请求问题....   这里我使用HttpClient来开发Http程序来完成简单的网络通信....其实使用HttpUrlConnection也可以实现,不过HttpClient可以完成HttpUrlConnection的所有功能,并且还自己增加了其他的

Android入门笔记(一)

第一部分,Android开发环境的搭建 1.去http://www.oracle.com/technetwork/java/javase/downloads/index.html下载最新版本jdk并安装,配置环境变量. 2.去http://www.eclipse.org/downloads/下载最新版本eclipse,并安装. 3.下载android sdk并安装,下载地址 http://pan.baidu.com/s/1i3ggwhn 4.下载ADT并安装,下载地址http://pan.bai

Android入门笔记 - 界面开发 - Animation

今天我们来看看Android中的动画效果,实例比较简单: AlphaAnimation:透明度动画 ScaleAnimation:缩放动画 TranslateAnimation:移动位置动画 RotateAnimation:旋转角度动画 先贴代码: 这个实例完全使用代码实现的,当然也可以使用xml文件实现,我们先来看这个实例: package com.example.demo5_03_animation; import android.os.Bundle; import android.anno

Android入门笔记 - 界面开发 - TextView,Button,EditText,Toast

今天简单介绍一下android中的控件资源,我们从一个登陆界面开始讲起,先贴代码: 准备工作:先在eclipse中创建一个android项目,我的项目名称是demo_login. (1)在项目文件夹的 res/layout/ 文件目录下打开 activity_main.xml : <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="f

Android入门笔记 - 数据存储 - SharedPreferences

接下来四篇我们来介绍Android中用于数据存储的四种方式: SharedPreferences Sqlite Files 网络 今天我们先来看一个最简单的:SharedPreferences. 这种数据存储方式是最简单,最轻便,也最实用的,但是只能用来储存基本数据类型.我们来看看怎么使用: 1. res/ layout/ activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an