android 学习笔记 HttpURLConnection

来源:互联网 发布:软件版本风险评估 编辑:程序博客网 时间:2024/06/05 20:10

 HttpURLConnection 的使用

首先需要获取到HttpURLConnection的实例,一般只需new出一个URL对象,并传入目标的网络地址,然后调用一下openConnection()方法即可,如下所示: 

 URL url = new URL("http://www.baidu.com");  HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

得到了HttpURLConnection的实例之后,我们可以设置一下HTTP请求所使用的方法。 常用的方法主要有两个,GET和POST。GET表示希望从服务器那里获取数据,而POST则表示希望提交数据给服务器。写法如下: 

connection.setRequestMethod("GET");

  接下来就可以进行一些自由的定制了,比如设置连接超时、读取超时的毫秒数,以及服务器希望得到的一些消息头等。这部分内容根据自己的实际情况进行编写,示例写法如下: 

 connection.setConnectTimeout(8000);  connection.setReadTimeout(8000); 
 之后再调用getInputStream()方法就可以获取到服务器返回的输入流了,剩下的任务就是对输入流进行读取,如下所示: 

 InputStream in = connection.getInputStream(); 

最后可以调用disconnect()方法将这个HTTP连接关闭掉,如下所示:

connection.disconnect(); 
package com.test.networktest;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.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {public static final int SHOW_RESPONSE = 0;private Button sendRequest;private TextView responseText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sendRequest = (Button) findViewById(R.id.send_request);responseText = (TextView) findViewById(R.id.response);sendRequest.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.send_request:sendRequsetWithHttpURLConnection();break;default:break;}}private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case SHOW_RESPONSE:String response = (String) msg.obj;// 把获取到的参数更新到UI界面responseText.setText(response);break;default:break;}}};private void sendRequsetWithHttpURLConnection() {// 开启线程发送请求:new Thread(new Runnable() {@Overridepublic void run() {HttpURLConnection connection = null;try {URL url = new URL("http://www.baidu.com");connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(8000);connection.setReadTimeout(8000);// 获取到服务器返回的输入流了InputStream in = connection.getInputStream();// 对获取的输入流进行读取。BufferedReader reader = new BufferedReader(new InputStreamReader(in));StringBuffer response = new StringBuffer();String line;while ((line = reader.readLine()) != null) {response.append(line);}Message message = new Message();message.what = SHOW_RESPONSE;message.obj = response;handler.sendMessage(message);} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (connection != null) {connection.disconnect();}}}}).start();}}

这个也好获取网络权限的代码如下所示:

<uses-permission android:name="android.permission.INTERNET" />   

那么如果是想要提交数据给服务器应该怎么办呢?其实也不复杂,只需要将HTTP请求的方法改成POST,并在获取输入流之前把要提交的数据写出即可。注意每条数据都要以键值对的形式存在,数据与数据之间用&符号隔开,比如说我们想要向服务器提交用户名和密码,就可以这样写: 

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




0 0
原创粉丝点击