文档章节

Android中使用HttpURLConnection和HttpClient发送Http请求

yolinfeng
 yolinfeng
发布于 2015/06/08 20:52
字数 630
阅读 51
收藏 0

    在android应用程序中,可以使用HttpURLConnection发送HTTP请求。详见如下实例

1、activity_main.xml布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical"
    >
	<Button 
	    android:id="@+id/send_request"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:text="发送请求"
	    />
	<ScrollView 
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"
	    >
	    <TextView 
	        android:id="@+id/content"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        />
	    
	</ScrollView>
</LinearLayout>
2、MainActivity.java

package com.example.testhttp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
	
	private Button sendRequest;
	private TextView content;
	
	private static final int SHOW_RESPONSE_CONTENT = 0;
	
	private Handler handler = new Handler(){
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case SHOW_RESPONSE_CONTENT:
				String response = (String) msg.obj;
				//显示到界面上
				content.setText(response);
				break;
			default:
				break;
			}
			
		};
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//获取发送按钮
		sendRequest = (Button) findViewById(R.id.send_request);
		//获取TextView
		content = (TextView) findViewById(R.id.content);
		sendRequest.setOnClickListener(this);
	}
	
	//重写点击方法
	@Override
	public void onClick(View view) {
		if(view.getId() == R.id.send_request){
			//如果是点击发送按钮,则处理Http请求--使用HttpURLConnection
			sendRequestWithHttpURLConnection();
		}
	}
	
	/**
	 * 使用HttpURLConnection发送请求
	 */
	public void sendRequestWithHttpURLConnection(){
		//新起一线程
		new Thread(new Runnable() {
			//处理逻辑
			@Override
			public void run() {
				HttpURLConnection connection = null;
				try {
					URL url = new URL("http://www.baidu.com");
					connection = (HttpURLConnection) url.openConnection();
					//设置参数
					//发送请求
					connection.setRequestMethod("GET");
					//连接超时时间
					connection.setConnectTimeout(5000);
					InputStream in = connection.getInputStream();
					//对服务器返回的输入流进行读取
					BufferedReader reader = new BufferedReader(new InputStreamReader(in));
					StringBuilder builder = new StringBuilder();
					String line;
					while((line = reader.readLine())!=null){
						builder.append(line);
					}
					
					//使用Message
					Message message = new Message();
					message.what = SHOW_RESPONSE_CONTENT;
					message.obj = builder.toString();
					handler.sendMessage(message);
				} catch (MalformedURLException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}finally{
					if(connection!=null){
						//断开连接
						connection.disconnect();
					}
				}
				
			}
		}).start();
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}



}
3、获取网络访问权限

修改AndroidManifest.xml,添加:

<uses-permission android:name="android.permission.INTERNET"/>
4、结果

点击发送按钮,如下所示:

      

这就是服务器返回给我吗的Html代码。


如果是发送数据给服务器呢?看如下代码:

connection.setRequestMethod("POST");
					DataOutputStream out = new DataOutputStream(connection.getOutputStream());
					out.writeBytes("username=yy&password=admin");


此外,可以使用HttpClient发送Http请求,

其他不变,在MainActivity.java类中添加方法sendRequestWithHttpClient,如下:

private void sendRequestWithHttpClient(){
		new Thread(new Runnable() {
			@Override
			public void run() {
			
				try {
					HttpClient httpClient= new DefaultHttpClient();
					HttpGet httpGet = new HttpGet("http://www.baidu.com");
					HttpResponse httpResponse = httpClient.execute(httpGet);
					if(httpResponse.getStatusLine().getStatusCode() == 200){
						//请求和相应成功
						HttpEntity entity = httpResponse.getEntity();
						//防止中文乱码
						String responseText = EntityUtils.toString(entity,"utf-8");
						Message message = new Message();
						message.what = SHOW_RESPONSE_CONTENT;
						message.obj = responseText.toString();
						handler.sendMessage(message);
					}
				} catch (ClientProtocolException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}).start();
	}
修改onClick方法,如下:
//重写点击方法
	@Override
	public void onClick(View view) {
		if(view.getId() == R.id.send_request){
			//如果是点击发送按钮,则处理Http请求--使用HttpURLConnection
		//	sendRequestWithHttpURLConnection();
			//如果是点击发送按钮,则处理Http请求--使用HttpClient
			sendRequestWithHttpClient();
		}
	}



效果如下:

     

本文转载自:http://blog.csdn.net/yyywyr/article/details/39013705

yolinfeng
粉丝 12
博文 196
码字总数 11946
作品 0
珠海
架构师
私信 提问
HttpClient和HttpURLConnection的区别

Android 提供两个HTTP客户端,分别是HttpURLConnection客户端和Apache的HttpClient,android的AndroidHttpClient是对HttpClient的实现。这两个HTTP客户端都支持HTTPS协议、流媒体的上传和下载...

Callen
2015/08/09
0
0
android中网络操作使用总结(http)

Android是作为智能手机的操作系统,我们开发的应用,大多数也都需要连接网络,通过网络发送数据、获取数据,因此作为一个应用开发者必须熟悉怎么进行网络访问与连接。通常android中进行网络连...

码农明明
2014/05/22
0
6
android使用HttpClient和URLConnection获取网页内容

今天开始android网络编程,平时做的android整机开发这块,基本上不大需要接触android网络变成这块知识,还是得熟悉熟悉。 本文要讲的是使用URLConnection对象和HttpClient组件访问网络以及获...

幸子
2014/03/27
0
1
Android HttpClient上传文件与Httpconnection知识小结

Android上传文件到服务端可以使用HttpConnection 上传文件,也可以使用Android封装好的HttpClient类。当仅仅上传文件可以直接使用httpconnection 上传比较方便快捷。 1、使用HttpConection上...

安克诚
2012/07/11
0
0
Android下的网络编程 & 代理的使用

1. 使用 标准Java接口: 设计的类: java.net.* 基本步骤: 1) 创建 URL 以及 URLConnection / HttpURLConnection 对象 2) 设置连接参数 3) 连接到服务器 4) 向服务器写数据 5)从服务器读取数据...

小编辑
2010/08/12
5.5K
2

没有更多内容

加载失败,请刷新页面

加载更多

系列一、入门教程web端实现地图功能

废话不多说,社会我多多 实现步骤如下 第一步、在高德api注册账户 搜索高德api点击进入官网,自己注册一个账号,你懂得怎么注册撒 点击进入下图画框位置,来到官网api入门教程 第二步、按照以...

我叫小糖主
27分钟前
12
0
springboot统一校验validator实现

第一步: pom.xml需引入spring-boot-start-web依赖,其中包含validator框架包 <!--Spring Boot Web依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifact......

zzx10
29分钟前
3
0
vue组件系列-预览、放大、缩小、旋转

这个用的是别人的,如果有问题,估计改起来会很纠结。 安装 npm install v-viewer --save 卸载 npm uninstall v-viewer 注册 在main.js中 // The Vue build version to load with the `impor...

轻轻的走过
30分钟前
3
0
Taro Input输入内容无法绑定state问题

在onInput事件中,返回内容,返回内容即是输入框内容 例如只能输入一个小数点: <Input type='digit' placeholder='带小数点的数字键盘' value={this.state.advance} onInput={ e => this.ch......

步步登高
32分钟前
2
0
Windows10远程连接CentOS7(搭建Xrdp服务器)

Windows10远程连接CentOS7(搭建Xrdp服务器) 听语音 浏览:0 | 更新:2018-02-11 12:56 1 2 3 4 5 6 7 分步阅读 通过VNC或Xdmcp的方式远程连接linux图形桌面,虽然都很方便,但有个缺点就是...

linjin200
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部