Android HttpURLConnection 实现Http协议与web传输数据​

注意点:

1.添加网络权限 <uses-permission android:name="android.permission.INTERNET"/>

如果没加 会出现 java.lang.SecurityException: Permission denied (missing INTERNET permission?)的错误

2.Http连接是一个耗时操作 必须写在线程中

编码步骤:

1.创建一个URL对象

URL url = new URL("http://xxxxxxxxx");  //双引号中写上要连接的域名;

2.创建一个HttpURLConnection对象

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

3.指定Http请求方式

conn.setRequestMethod("GET");//这里是GET方式,如果要POST方式可以改为POST;

4.设定连接超时时间和读取超时时间

conn.setConnectTimeout(5000);

conn.setReadTimeout(5000);

5.得到输入流

InputStream in = conn.getInputStream();

6.查看连接是否成功

if(conn.getResponseCode() == 200){                           //getResponse()可以得到返回码,如果返回码是200就是正常连接了
                System.out.println("http连接成功");
}

else {

System.out.println("连接有误');
}

连接完毕;

至此,我们已经得到了输入流,那么我们从流中取出数据就可以了。用java的输入输出流来执行。

int len=-1; //用来存放数据长度
byte buffer[] = new byte[1024]; //存放数据
ByteArrayOutputStream baos = new ByteArrayOutputStream(); //一个输出流

while((len = in.read(buffer))>0) {   //使用read方法从输入流读取数据,read方法返回值是本次实际取回的数据长度,当没数据返                                                           //回-1
                baos.write(buffer,0,len);  //每次都将数据写入输出流存起
            }
in.close();  //关闭流

content = new String(baos.toByteArray()); //输出流转字符串;

得到数据 爽的一批;

最后上一下Activity完整代码

package com.example.khd_test;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
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.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends Activity implements Runnable{
	TextView textView;
	Handler handler = new Handler();
	String content;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		textView = (TextView)findViewById(R.id.textView);
		new Thread(MainActivity.this).start();
	}
	public void run() {
		// TODO Auto-generated method stub
		try {
			URL url = new URL("http://xxxxxxx");
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");
			conn.setConnectTimeout(5000);
			conn.setReadTimeout(5000);	
			InputStream in = conn.getInputStream();
			
			if(conn.getResponseCode() == 200){
				System.out.println("http连接成功");
		    }
			else {
				System.out.println("连接有误");
			}
			
			int len=-1;
			byte buffer[] = new byte[1024];
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			while((len = in.read(buffer))>0) {
				baos.write(buffer,0,len);
			}
			in.close();
			content = new String(baos.toByteArray());
			handler.post(new Runnable() {
				
				@Override
				public void run() {
					// TODO Auto-generated method stub
					textView.setText(content);
				}
			});
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值