URLConnection和HttpClient使用入门

http://android.yaohuiji.com/archives/932


本讲内容:URLConnection和HttpClient使用入门


在Android中除了使用WebView控件访问网络以外,还有用代码方式访问网络的方法,代码方式有时候会显得更加灵活。本讲会介绍使用URLConnection对象和HttpClient组件访问网络的方法。而这两种方法和Java Web开发中的使用方式几乎没有区别,而Web开发的相关资料比比皆是,因此有兴趣的同学学完本讲之后可以专门去研究一下HttpClient4.0的内容,以求更深入的学习。


一、分别使用URLConnection和HttpClient访问Google天气服务的例子


这个例子的的目的就是从Google哪里获取郑州的天气预报信息,并显示在TextView中,本讲只会把返回的XML数据显示出来,下一讲我们学XML解析的时候再把这个天气预报做成图文并茂的形式,所以大家先暂时忍耐一下丑陋的界面。


1、新建一个项目 Lesson30_HttpClient ,主Activity的文件名是 MainActivity.java


2、res/layout/main.xml的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
    
<textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/TextView01" android:text="网络连接测试">
    
<button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Button01" android:text="使用URLConnection访问GoogleWeatherAPI">
</button>

<button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Button02" android:text="使用HttpClient访问GoogleWeatherAPI">
</button>


<scrollview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ScrollView01">
	<textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/TextView02">
	</textview>
</scrollview>
</textview></linearlayout>

3、MainActivity.java的内容如下:

package android.basic.lesson30;

import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	TextView tv;

	String googleWeatherUrl1 = "http://www.google.com/ig/api?weather=zhengzhou";
	String googleWeatherUrl2 = "http://www.google.com/ig/api?hl=zh-cn&weather=zhengzhou";
	
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// 定义UI组件
		Button b1 = (Button) findViewById(R.id.Button01);
		Button b2 = (Button) findViewById(R.id.Button02);
		tv = (TextView) findViewById(R.id.TextView02);

		// 设置按钮单击监听器
		b1.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// 使用URLConnection连接GoogleWeatherAPI
				urlConn();
			}
		});

		// 设置按钮单击监听器
		b2.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// 使用HttpCient连接GoogleWeatherAPI
				httpClientConn();

			}
		});

	}

	// 使用URLConnection连接GoogleWeatherAPI
	protected void urlConn() {

		try {
			// URL
			URL url = new URL(googleWeatherUrl1);
			// HttpURLConnection
			HttpURLConnection httpconn = (HttpURLConnection) url.openConnection();

			if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) {
				Toast.makeText(getApplicationContext(), "连接Google Weather API成功!",
						Toast.LENGTH_SHORT).show();
				// InputStreamReader
				InputStreamReader isr = new InputStreamReader(httpconn.getInputStream(), "utf-8");
				int i;
				String content = "";
				// read
				while ((i = isr.read()) != -1) {
					content = content + (char) i;
				}
				isr.close();
				//设置TextView
				tv.setText(content);
			}
			//disconnect
			httpconn.disconnect();

		} catch (Exception e) {
			Toast.makeText(getApplicationContext(), "连接Google Weather API失败", Toast.LENGTH_SHORT)
					.show();
			e.printStackTrace();
		}
	}

	// 使用HttpCient连接GoogleWeatherAPI
	protected void httpClientConn() {
		//DefaultHttpClient
		DefaultHttpClient httpclient = new DefaultHttpClient();
		//HttpGet
		HttpGet httpget = new HttpGet(googleWeatherUrl2);
		//ResponseHandler
		ResponseHandler<string> responseHandler = new BasicResponseHandler();
		
		try {
			String content = httpclient.execute(httpget, responseHandler);
			Toast.makeText(getApplicationContext(), "连接Google Weather API成功!",
					Toast.LENGTH_SHORT).show();
			//设置TextView
			tv.setText(content);
		} catch (Exception e) {
			Toast.makeText(getApplicationContext(), "连接Google Weather API失败", Toast.LENGTH_SHORT)
			.show();
			e.printStackTrace();
		}
		httpclient.getConnectionManager().shutdown();
	}
}

4、最后别忘了在AndroidManifest.xml中加入访问网络的权限,<uses-permission android:name="android.permission.INTERNET"></uses-permission>


5、运行程序查看结果:



image



按第一个按钮的效果,返回的数据结果显示在了TextView里。



image
按第二个按钮的效果,返回的数据结果显示在了TextView里, 所不同的是显示的是中文。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值