android学习之网络连接2

花了一点时间,终于写完了httpclient的网络连接,其实这两种方法在我看来的话,并没有什么好坏,第一种方法有点类似c的面向过程,而第二种则更加倾向于面向对象,话不多说,代码如下,我只贴java部分的代码

package com.example.httpclientdemo;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.DefaultClientConnection;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void onMyClick(View view) {
		int id = view.getId();
		switch (id) {
		case R.id.get:
			new Thread(new Runnable() {

				@Override
				public void run() {
					getImageByHttpClient();

				}
			}).start();
		case R.id.post:
			new Thread(new Runnable() {
				public void run() {
					getResponseByHttpClient();
				}
			}).start();
		}
	}

	private void getResponseByHttpClient() {
		// 创建HtpClient对象
		HttpClient hclient = new DefaultHttpClient();
		// 创建请求方法对象
		HttpPost hpost = new HttpPost(
				"http://apistore.baidu.com/apiworks/servicedetail/697.html");
		// 设置头消息
		hpost.addHeader("apikey", "cfc032894216b5d1c1808b4ec84fcee6");
		// 根据文件创建参数键值对对象
		NameValuePair pair = new BasicNameValuePair("version", "1.0");
		List<NameValuePair> list = new ArrayList<NameValuePair>();
		list.add(pair);
		// 创建一个数据实体
		try {
			HttpEntity hEntity = new UrlEncodedFormEntity(list);
			hpost.setEntity(hEntity);
			// 执行请求,阻塞方法
			HttpResponse hresponse = hclient.execute(hpost);
			// 获取服务器的数据实体
			HttpEntity hResponseEntity = hresponse.getEntity();
			// 获取数据实体的内容
			final String responseStr = EntityUtils.toString(hResponseEntity);
			runOnUiThread(new Runnable() {
				public void run() {
					Toast.makeText(MainActivity.this,
							"responseStr" + responseStr, Toast.LENGTH_SHORT)
							.show();
				}
			});
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	private void getImageByHttpClient() {
		// 创建HttpClient对象
		HttpClient hclient = new DefaultHttpClient();
		// 创建本次请求的方法对象
		HttpGet hg = new HttpGet(
				"http://p3.so.qhimg.com/t0116efaf999f819078.jpg");
		try {
			// 设置请求方法
			HttpResponse hresponse = hclient.execute(hg);
			// 从服务器响应对象,获取数据实体
			HttpEntity entity = hresponse.getEntity();
			// 获取图片字节数组
			byte[] imgBytes = EntityUtils.toByteArray(entity);
			// 将获得的字节图片转换成为位图
			final Bitmap bm = BitmapFactory.decodeByteArray(imgBytes, 0,
					imgBytes.length);
			runOnUiThread(new Runnable() {

				@Override
				public void run() {
					// 实例化imageView
					ImageView iv = (ImageView) findViewById(R.id.img);
					iv.setImageBitmap(bm);
				}
			});

		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值